設(shè)計模式之合成(Composite)模式

場景:
數(shù)據(jù)流向:kafka-->spark-->es仿耽。
其中spark數(shù)據(jù)處理會有過濾,etl等步驟各薇,需求不同项贺,搭配不同。如A場景需要過濾+etl峭判;B場景需要過濾+Etl1+etl2开缎;C場景需要etl2+etl3。不同的合成有不同的功能朝抖。

實現(xiàn):使用合成模式啥箭。
定義:
接口ChildProcess,作為合成子項的統(tǒng)一接口:

public interface ChildProcess {
    public Dataset doChildProcess() throws Exception;
}

組合類:

public class CompositeChildProcess implements ChildProcess,Serializable {

    private List<ChildProcess> childProcesses = new ArrayList<>();

    public void add(ChildProcess childProcess) {
        childProcesses.add(childProcess);
    }

    public void remove(ChildProcess childProcess) {
        childProcesses.remove(childProcess);
    }

    @Override
    public Dataset doChildProcess(Dataset dataset) throws Exception{
        for (ChildProcess childProcess : childProcesses) {
            dataset = childProcess.doChildProcess(dataset);
        }
        return dataset;
    }
}

elt合成子項:

public class CustomEtlProcess implements ChildProcess {
    @Override
    public Dataset doChildProcess(Dataset dataset) throws Exception{
       ....
        return etl;
    }
}

filter合成子項:

public class CustomkafkaFilterProcess implements ChildProcess,Serializable {
  @Override
    public Dataset doChildProcess(Dataset dataset) throws Exception{
      ....
        return filter;
    }
}

client調(diào)用端:
如kafka-filter-etl-es過程

CompositeChildProcess compositeChildProcess = new CompositeChildProcess();
CustomkafkaFilterProcess customkafkaFilterProcess = new CustomkafkaFilterProcess();
compositeChildProcess.add(customkafkaFilterProcess);
CustomEtlProcess customEtlProcess = new CustomEtlProcess();
compositeChildProcess.add(customEtlProcess);
compositeChildProcess.doChildProcess();

如kafka-etl-filter-etl-es過程:

CompositeChildProcess compositeChildProcess = new CompositeChildProcess();
CustomEtlProcess customEtlProcess = new CustomEtlProcess();
compositeChildProcess.add(customEtlProcess);
CustomkafkaFilterProcess customkafkaFilterProcess = new CustomkafkaFilterProcess();
compositeChildProcess.add(customkafkaFilterProcess);
CustomEtlProcess customEtlProcess = new CustomEtlProcess();
compositeChildProcess.add(customEtlProcess);
compositeChildProcess.doChildProcess();

由于所以子項,包含組合類都實現(xiàn)了子項接口治宣,因此可有任意組合和多層級組合急侥,實現(xiàn)靈活多變的流程控制。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末侮邀,一起剝皮案震驚了整個濱河市坏怪,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌绊茧,老刑警劉巖铝宵,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡鹏秋,警方通過查閱死者的電腦和手機尊蚁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來侣夷,“玉大人横朋,你說我怎么就攤上這事“偻兀” “怎么了琴锭?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長衙传。 經(jīng)常有香客問我决帖,道長,這世上最難降的妖魔是什么蓖捶? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任地回,我火速辦了婚禮,結(jié)果婚禮上腺阳,老公的妹妹穿的比我還像新娘落君。我一直安慰自己穿香,他們只是感情好亭引,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著皮获,像睡著了一般焙蚓。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上洒宝,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天购公,我揣著相機與錄音,去河邊找鬼雁歌。 笑死宏浩,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的靠瞎。 我是一名探鬼主播比庄,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼乏盐!你這毒婦竟也來了佳窑?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤父能,失蹤者是張志新(化名)和其女友劉穎神凑,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體何吝,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡溉委,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年鹃唯,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瓣喊。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡俯渤,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出型宝,到底是詐尸還是另有隱情八匠,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布趴酣,位于F島的核電站梨树,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏岖寞。R本人自食惡果不足惜抡四,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望仗谆。 院中可真熱鬧指巡,春花似錦、人聲如沸隶垮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽狸吞。三九已至勉耀,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蹋偏,已是汗流浹背便斥。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留威始,地道東北人枢纠。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像黎棠,于是被迫代替她去往敵國和親晋渺。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容