设计模式-建造篇(建造者模式)
建造者模式
建造者:创建和提供实例,导演:管理建造出来的实例的依赖关系。我们想要买汽车 - 奥迪A6,去了4S店以后,我们发现这玩意根据不同的套餐价格也是不一样的。车的大体没有改变,但是内部设置却不同了。
【设计模式-建造篇(建造者模式)】奥迪A6 :
20万 配置 沙发和空调
30万 配置 空调和美女
40万 配置 美女和电脑
/**
* Created by malei on 2016/12/5.
*/
public class HuaweiCompany {
private String ceo;
private String cto;
private String cao;
/*构造方法中持有建造者对象
* 导演:管理建造出来的实例的依赖关系。*/
public HuaweiCompany(CompanyBuilder builder){
this.ceo = builder.ceo;
this.cto = builder.cto;
this.cao = builder.cao;
}/*需要被构建的对象只提供 getter 方法*/
public String getCeo(){
return ceo;
}
public String getCto() {
return cto;
}
public String getCao() {
return cao;
}/*建造者作为静态内部类使用
* 建造者:创建和提供实例*/
public static class CompanyBuilder{
private String ceo;
private String cto;
private String cao;
/*按需为建造者提供不同的构造方法*/
public CompanyBuilder(String ceo){
this.ceo = ceo;
}
public CompanyBuilder(){
}/*返回被构建的对象*/
public HuaweiCompany build(){
return new HuaweiCompany(this);
}/*只提供 setter 方法*/
public CompanyBuilder setCeo(String ceo) {
this.ceo = ceo;
return this;
}public CompanyBuilder setCto(String cto) {
this.cto = cto;
return this;
}public CompanyBuilder setCao(String cao) {
this.cao = cao;
return this;
}
}private void say() {
Log.show("ceo="+ceo + "\ncto="+cto+"\ncao="+cao);
}public static void main(String[] args){
HuaweiCompany buidler = new CompanyBuilder()
.setCeo("马磊")
.setCto("马云")
.setCao("马化腾").build();
buidler.say();
}
}
推荐阅读
- .Net|.Net vs .Net Core,我该如何选择(看这一篇文章就够了)
- 2018.5.13|2018.5.13 星期日 晴 一年级下学期亲子日记第46篇
- 作弊
- 时间(外一篇)
- AUTOSAR通信篇—CanTp和CanIf模块
- 乡土中国之上坟
- 一起学Rust|【一起学Rust | 基础篇】rust函数与流程控制详解
- 初识设计模式|初识设计模式 - 工厂模式
- 设计模式之命令模式
- python|100天精通Python(数据分析篇)——第52天(numpy完结)