背景
本人从事开发工作也有多年,目前坐标湖南长沙,以前在各种平台也发过一些文章但是都没有坚持下来;
这个系列是要写设计模式的,将23大设计模式逐一用自己的理解加例子写出来。
其一、眨眼就到了而立之年,觉得自己记忆力也是下降久做过的东西总是记不起,果然是好记性不如烂笔头。
其二、这么多年白嫖了网上很多的文章,视频,一直觉得应该分享一些东西但总是沉不下心去做。
其三、可能写的不好至少也留下一些东西,也是希望能帮助到一些朋友。
说明
在我的理解里:每一种设计模式仅仅是一种思想,并不是说每个设计模式之间就会有很明确的边界。有时候你会觉得某两种设计模式实现起来特别像,其实是因为有些的设计模式延伸出来的仅仅是着重的看待点不一样而已;学习设计模式一定不是只学习固定的实现方式。要了解设计思想,然后在项目中灵活得进行最适合设计。
建造者模式
建造者模式:“由多个部分分别创建后组成构建成一个对象”
与链式调用的关系:没有任何关系!!!!!链式调用仅仅是一种编码风格,返回值是对象本身而已!!!
直接上一段实现代码
/**
* * @Description 房间装修报价
* * @Version 1.0
* * @Remark 比如房间里需要放很多东西,如:沙发,电视,茶几
**/
public class HouseDecoration {
String sofa;
String tv;
String tea;
public String getSofa() {
return sofa;
}
public void setSofa(String sofa) {
this.sofa = sofa;
}
public String getTv() {
return tv;
}
public void setTv(String tv) {
this.tv = tv;
}
public String getTea() {
return tea;
}
public void setTea(String tea) {
this.tea = tea;
}
@Override
public String toString() {
return "HouseDecoration{" +
"sofa='" + sofa + '\'' +
", tv='" + tv + '\'' +
", tea='" + tea + '\'' +
'}';
}
}
/**
* * @Description 整体报价
* * @Version 1.0
* * @Remark 比如房间里需要放很多东西,如:沙发,电视,茶几
**/
public abstract class WholeOffer {
HouseDecoration houseDecoration = new HouseDecoration();
public abstract void offSofa();
public abstract void offTV();
public abstract void offTea();
//返回报价
HouseDecoration getHouseDecoration() {
return houseDecoration;
}
}
public class PTSWholeOffer extends WholeOffer {
@Override
public void offSofa() {
houseDecoration.setSofa("沙发,3200");
}
@Override
public void offTV() {
houseDecoration.setTv("电视,6200");
}
@Override
public void offTea() {
houseDecoration.setTea("茶几,1200");
}
}
public class MJWholeOffer extends WholeOffer {
@Override
public void offSofa() {
houseDecoration.setSofa("沙发,6200");
}
@Override
public void offTV() {
houseDecoration.setTv("电视,5200");
}
@Override
public void offTea() {
houseDecoration.setTea("茶几,2200");
}
}
//管理建造者的报价
public class HouseDecorationManager {
private WholeOffer builder;
public HouseDecorationManager(WholeOffer builder) {
this.builder = builder;
}
//报价
public HouseDecoration build() {
builder.offSofa();
builder.offTea();
builder.offTV();
return builder.getHouseDecoration();
}
}
调用示例
//建造者模式
Log.d("菩提树报价:" + new HouseDecorationManager(new PTSWholeOffer()).build().toString());
Log.d("名匠报价:" + new HouseDecorationManager(new MJWholeOffer()).build().toString());
链式调用实现构建者示例就不展示了,可以自己试着实现一下!提供的源码链接内也包含,有兴趣的可以查看。
建造者模式链接
吐槽
没啥好吐槽的了…