1. 程式人生 > 實用技巧 >23種設計模式

23種設計模式

♥建造模式:

produce檔案(省略setter,getter等等):

public class Produce {
private String a;
private String b;
private String c;
private String d;
}

方式一:該方式分為 :產品Produce,建造者(抽象)Bulider,建造者(具體)Worker,♠指揮者 Director

注:由具體實現抽象,在具體中可以為produce中引數的賦值等操作,但是此時不呼叫不會賦值,只有通過指揮者的方法或者有參構造器進行對抽象方法的呼叫。

最後測試時為指揮者傳入具體的建造者,並且呼叫獲得produce

建造者(抽象):

public abstract class Builder {
public abstract void setAA();
public abstract void setBB();
public abstract void setCC();
public abstract void setDD();

public abstract Produce getPeoduct();
}

抽象者(具體):

public class Worker extends  Builder {
//由具體建造者的無參構造方法new產品
private Produce p;
public Worker() {
p=new Produce();
}

@Override
public void setAA() {
p.setA("注入A");
}
@Override
public void setBB() {
p.setB("注入b");
}
@Override
public void setCC() { p.setC("注入c"); }
@Override
public void setDD() { p.setD("注入D"); }

@Override
public Produce getPeoduct() {
return p;
}
}
指揮者:
public class Director {
public Produce getProduct(Builder builder){
builder.setAA();
builder.setBB();
builder.setCC();
builder.setDD();

return builder.getPeoduct();
}
}
測試:
Director director = new Director();
Produce p = director.getProduct(new Worker());
System.out.println(p.toString());

方式二:給方式將指揮者角色的功能賦予使用者
建造者(抽象):
public abstract class Builder {
public abstract Builder setAA(String msg);
public abstract Builder setBB(String msg);
public abstract Builder setCC(String msg);
public abstract Builder setDD(String msg);

public abstract Produce getPeoduct();
}
抽象者(具體):依舊new物件,並且在這裡對物件中屬性賦值操作是返回的還是抽象者本身,最終要通過getProduct()方法實現獲取物件
public class Worker extends Builder {
private Produce p;
public Worker() {
p=new Produce();
}
@Override
public Builder setAA(String msg) {
p.setA(msg);
return this;
}
@Override
public Builder setBB(String msg) {
p.setB(msg);
return this;
}
@Override
public Builder setCC(String msg) {
p.setC(msg);
return this;
}
@Override
public Builder setDD(String msg) {
p.setD(msg);
return this;
}

@Override
public demo2.Produce getPeoduct() {
return p;
}
}

測試:
Worker worker = new Worker();
Produce peoduct = worker.setAA("lala").setBB("hahah").getPeoduct();//通過鏈式程式設計實現對屬性賦值
System.out.println(peoduct.toString());