Java设计模型(3)——建造者模型
来源:互联网 发布:知乎怎样回答问题 编辑:程序博客网 时间:2024/06/06 20:43
一、什么是建造者模式
Builder模式也叫建造者模式或者生成器模式,是由GoF提出的23种设计模式中的一种。Builder模式是一种对象创建型模式之一,用来隐藏复合对象的创建过程,它把复合对象的创建过程加以抽象,通过子类继承和重载的方式,动态地创建具有复合属性的对象。 简单一点就是: 将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。 [构建与表示分离,同构建不同表示]与抽象工厂的区别:在建造者模式里,有个指导者,由指导者来管理建造者,用户是与指导者联系的,指导者联系建造者最后得到产品。即建造模式可以强制实行一种分步骤进行的建造过程。建造模式是将复杂的内部创建封装在内部,对于外部调用的人来说,只需要传入建造者和建造工具,对于内部是如何建造成成品的,调用者无需关心。
举个简单的例子,如汽车,有很多部件,车轮,方向盘,发动机还有各种小零件等等,部件很多,但远不止这些,如何将这些部件装配成一部汽车,这个装配过程也很复杂(需要很好的组装技术), builder模式就是为了将部件和组装分开。
建造者模式的结构
三、建造者模式应用场景
- 对象的创建:Builder模式是为对象的创建而设计的模式
- 创建的是一个复合对象:被创建的对象为一个具有复合属性的复合对象
- 关注对象创建的各部分的创建过程:不同的工厂(这里指builder生成器)对产品属性有不同的创建方法
代码:
BuilerDirector.java
public class BuilerDirector { public void construct(HouseBuiler h){ h.setWuDing(); h.setDiBan(); h.setYangTai(); }}
House.java
public class House { //地板 private String diban; //阳台 private String yangtai; //屋顶 private String wuding; public House() { super(); } public House(String diban, String yangtai, String wuding) { super(); this.diban = diban; this.yangtai = yangtai; this.wuding = wuding; } public String getDiban() { return diban; } public void setDiban(String diban) { this.diban = diban; } public String getYangtai() { return yangtai; } public void setYangtai(String yangtai) { this.yangtai = yangtai; } public String getWuding() { return wuding; } public void setWuding(String wuding) { this.wuding = wuding; }}
HouseBuiler.java
public interface HouseBuiler { //修屋顶 public void setDiBan(); //修阳台 public void setYangTai(); //修屋顶 public void setWuDing(); //获取实体对象 public House getHouse();}
Main.java
public class Main { public static void main(String[] args) { //由工程队来修 HouseBuiler h = new PingFangBuiler(); //设计者来做 BuilerDirector b = new BuilerDirector(); b.construct(h); House bb = h.getHouse(); System.out.println(bb.getDiban()); System.out.println(bb.getWuding()); System.out.println(bb.getYangtai()); }}
PingFangBuiler.java
public class PingFangBuiler implements HouseBuiler { House h = new House(); @Override public void setDiBan() { h.setDiban("平房——地板"); } @Override public void setYangTai() { h.setYangtai("平房——阳台"); } @Override public void setWuDing() { h.setWuding("平房——屋顶"); } @Override public House getHouse() { return h; }}
阅读全文
0 0
- Java设计模型(3)——建造者模型
- 设计模式-建造者模型
- 设计模式之建造者模型
- java设计模式—建造者模式
- java设计模式—建造者模式
- Java设计模式—建造者模式
- java设计模式——建造者模式(Builder)
- java设计模式——建造者模式(Builder)
- java设计模式(四)——建造者模式
- 架构设计:系统间通信(3)——IO通信模型和JAVA实践 上篇
- 架构设计:系统间通信(3)——IO通信模型和JAVA实践 上篇
- 架构设计:系统间通信(3)——IO通信模型和JAVA实践 上篇
- java 23设计模型(1)---单例模型
- java 23设计模型(2)---工厂方式模型
- 设计模式系列15---构表分离的建造者模型
- SqlServer2008—概念模型设计
- java设计模式——建造者模式
- JAVA设计模式(六)——建造者模式
- 机器学习----正负样本不匹配
- 【NOIP2017提高A组冲刺11.4】Pacifist
- Python之检测文件的字符编码(chardet)
- 最长公共子序列
- APICloud中app如何在手机端测试
- Java设计模型(3)——建造者模型
- Android 虚拟机判断蓝牙是否开启
- 数据库事务隔离级别-- 脏读、幻读、不可重复读(清晰解释)
- CentOS7_1708_Minimal 静态NAT网络配置
- Linux学习记录—vim
- Jquery、Js实现网页打印,及打印样式的自定义
- 机器学习中的特征——特征选择的方法以及注意点
- rikao3将数据图片展示到listview上
- #1015 KMP算法