前言
今天接到一個需求,是對 訂單做一些監(jiān)控。比如有提貨監(jiān)控、送貨監(jiān)控、出庫監(jiān)控。每一種類型的監(jiān)控,都有很多相應(yīng)的 字段需要去填充 相應(yīng)的值
Java設(shè)計模式:將一個復(fù)雜對象的構(gòu)建與它的 表示分離,使用同樣的構(gòu)建可以創(chuàng)建不同的表示。
適合該模式的情景:對象結(jié)構(gòu)復(fù)雜,利用單純的構(gòu)造方法無法滿足描述該對象的需求,對象創(chuàng)建過程獨(dú)立于創(chuàng)建該對象的類。
public static class Order {
private Method1 method1;
private Method2 method2;
private Method3 method3;
}
比如創(chuàng)建上面這個 Order 對象,需要經(jīng)歷 method1、method2、method3 三個方法,已經(jīng)方法內(nèi)部的邏輯,這種對象的創(chuàng)建就比較符合用 設(shè)計模式-生成器模式 去做
生成器模式
生成器模式也成為建造者模式,生成器模式的意圖在于將一個復(fù)雜的構(gòu)建與其表示相分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。在軟件設(shè)計中,有時候面臨一個非常復(fù)雜的對象的創(chuàng)建工作。這個發(fā)雜的對象通??梢苑殖蓭讉€較小的部分,由各個子對象組合出這個復(fù)雜對象的過程相對來說比較穩(wěn)定,但是子對象的創(chuàng)建過程各不相同并且可能面臨變化。
實(shí)現(xiàn)步驟
(1). 定義一個生成器接口,里面分別是去構(gòu)建 Order 類三個屬性的方法。
public interface IControlBuild<T> {
public void buildMethod1();
public void buildMethod2();
public void buildMethod3();
//混合三個方法的構(gòu)建,返回 Order 對象
public T composite();
}
(2).定義一個生成器類:
如果以后有針對其他的監(jiān)控,也可以實(shí)現(xiàn) IControlBuild 接口就行。
public class OrderGenerator implements IControlBuild<Order> {
//order是成員變量
Order order= new Order();
@Override
public void buildMethod1(){
// build order by buildMethod1
}
@Override
public void buildMethod2(){
//你的邏輯
// build order by buildMethod1
}
@Override
public void buildMethod3(){
//你的邏輯
// build order by buildMethod1
}
//混合三個方法的構(gòu)建,返回 Order 對象
public Order composite(){
//你的邏輯
}
}
composite 方法是用泛型,只是為了提高擴(kuò)展性,以后可能還有別的其他的監(jiān)控對象需要被構(gòu)建,就可以這樣文章來源:http://www.zghlxwxcb.cn/news/detail-495831.html
public class Other1Generator implements IControlBuild<Other1> {
//order是成員變量
Other1 other1= new Other1();
@Override
public void buildMethod1(){
// build other1 by buildMethod1
}
@Override
public void buildMethod2(){
//你的邏輯
// build other1 by buildMethod1
}
@Override
public void buildMethod3(){
//你的邏輯
// build other1 by buildMethod1
}
//混合三個方法的構(gòu)建,返回 Order 對象
public Other1 composite(){
//你的邏輯
}
}
(3).最后定義一個調(diào)度類,統(tǒng)一把 IControlBuild 接口的方法都調(diào)用起來。當(dāng)然如果沒有定義這個統(tǒng)一的調(diào)度類,那么你就需要在構(gòu)建對象的時候,逐一去調(diào)用 IControlBuild 三個構(gòu)建方法,但不建議這么去做文章來源地址http://www.zghlxwxcb.cn/news/detail-495831.html
public class ControlHandler<T> {
private final IControlBuild<T> build;
public ControlHandler(IControlBuild<T> build) {
this.build = build;
}
//這個指揮類有一個build方法,在該方法中調(diào)用 接口的所有方法 生成
public T build() {
build.buildMethod1();
build.buildMethod2();
build.buildMethod3();
return build.composite();
}
//寫個main方法簡單測試一下
public static void main(String[] args) {
IControlBuild build = new OrderGenerator<Order>();
ControlHandler<Order> handler= new ControlHandler(build);
Order order = handler.build();
System.out.println(order);
}
}
到了這里,關(guān)于Java設(shè)計模式-生成器模式的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!