23種設計模式
阿新 • • 發佈:2020-08-02
♥建造模式:
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());