建造者模式
来源:互联网 发布:mac ifconfig 编辑:程序博客网 时间:2024/05/21 17:10
定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示
依然是来个例子
首先是我们要构建的产品,包含一个添加方法与显示方法
public class Product{ private List<String> parts = new ArrayList<String>(); public void add(String part) { this.parts.add(part); } public void show() { System.out.println("\n产品创建---"); for (String string : this.parts) { System.out.println(string); } }}
然后是个建造者类,这是个虚类,所有方法都是虚的,子类必须实现所有方法才行,这就避免了在实际创建时缺少某些步骤的情况
public abstract class Builder{ abstract public void bilderPartA(); abstract public void bilderPartB(); abstract public Product getResult();}
第一个具体类,实现父类的方法,也就是给产品加些字符串,也是在实际代码中给产品增加的新内容
public class ConcreteBuilder1 extends Builder{ private Product product = new Product(); @Override public void bilderPartA() { this.product.add("部件A"); } @Override public void bilderPartB() { this.product.add("部件B"); } @Override public Product getResult() { return this.product; }}
第二个子类,同上
public class ConcreteBuilder2 extends Builder{ private Product product = new Product(); @Override public void bilderPartA() { this.product.add("部件K"); } @Override public void bilderPartB() { this.product.add("部件L"); } @Override public Product getResult() { return this.product; }}
指挥官,这牛逼角色,控制着构建过程,
public class Director{ public void construct(Builder builder) { builder.bilderPartA(); builder.bilderPartB(); }}
客户端就很简单了,感觉与前面的几种模式有很大的相同点
public class BuilderMain{ public static void main(String[] args) { Director director = new Director(); Builder builder = new ConcreteBuilder1(); director.construct(builder); Product p1 = builder.getResult(); p1.show(); builder = new ConcreteBuilder2(); director.construct(builder); Product p2 = builder.getResult(); p2.show(); }}
总结:这个模式主要用在那些构建细节比较复杂,构建过程又比较单一,可以将这个过程总结出来,放到父类中强制子类实现;指挥官的角色会保证构建过程的完整。
0 0
- Builder 建造者模式
- 建造者模式
- 设计模式-------建造者
- 建造者模式
- 建造者模式(Builder)
- 建造者模式(Builder)
- 建造者模式
- 建造者模式 - builder
- 建造者模式
- Builder建造者模式
- 建造者模式(Builder)
- 建造者模式(builder)
- 建造者模式
- java建造者模式
- 建造者模式
- 建造者模式
- 建造者模式(Builder)
- 建造者模式
- hadoop安装笔记
- 反腐剧《人民的名义》官商勾结大揭秘,腐败分子大抓捕
- 数学取模运算——1的个数
- View的事件传递源码详细解析
- 仿腾讯新闻网动态获取数据
- 建造者模式
- css3
- Linux创建空文件的方法
- LeetCode : Range Sum Query
- 银行系统基础查询
- React Native Touchable(按钮) onPress 事件系列总结
- 使用eclipse创建maven项目卡住
- socket基础之c/s通信过程
- 使用ubuntu的体会