设计模式之建造者模式
2016-02-29 16:04
267 查看
建造者模式(Builder),将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
如果我们用了建造者模式,那么用户只需指定需要建造的类型就可以得到它们,而具体建造的过程和细节就不需知道了。
Builder,是为创建一个Product对象的各个部件指定的抽象接口。
ConcreteBuilder,它是具体建造者,实现Builder接口,构造和装配各个部件。
Product是产品角色。
Director是指挥者,它是构建一个使用Builder接口的对象。
什么时候需要使用建造者模式:
主要是用于创建一些复杂的对象,这些对象内部构建间的建造顺序通常是稳定的,但对象内部的构建通常面临着复杂的变化。
建造者模式的好处是使得建造代码与表示代码分离,由于建造者隐藏了该产品是如何组装的,所以若需要改变一个产品的内部表示,只需要再定义一个具体的建造者就可以了。
建造者模式基本代码:
Product类:
Builder类:
ConcreteBuilder类:
Director类:
调用:
建造者模式是在当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时适用的模式。
如果我们用了建造者模式,那么用户只需指定需要建造的类型就可以得到它们,而具体建造的过程和细节就不需知道了。
Builder,是为创建一个Product对象的各个部件指定的抽象接口。
ConcreteBuilder,它是具体建造者,实现Builder接口,构造和装配各个部件。
Product是产品角色。
Director是指挥者,它是构建一个使用Builder接口的对象。
什么时候需要使用建造者模式:
主要是用于创建一些复杂的对象,这些对象内部构建间的建造顺序通常是稳定的,但对象内部的构建通常面临着复杂的变化。
建造者模式的好处是使得建造代码与表示代码分离,由于建造者隐藏了该产品是如何组装的,所以若需要改变一个产品的内部表示,只需要再定义一个具体的建造者就可以了。
建造者模式基本代码:
Product类:
public class Product { List<String> mParts = new ArrayList<String>(); // 添加产品部件 public void add(String part) { mParts.add(part); } // 展示所有部件 public void show() { for (String item : mParts) { System.out.println("部件:" + item); } } }
Builder类:
public abstract class Builder { public abstract void buildPartA(); public abstract void buildPartB(); public abstract Product create(); }
ConcreteBuilder类:
public class ConcreteBuilder extends Builder { private Product mProduct = new Product(); @Override public void buildPartA() { mProduct.add("桌面"); } @Override public void buildPartB() { mProduct.add("4条腿"); } @Override public Product create() { return mProduct; } }
Director类:
public class Director { public void construct(Builder builder) { builder.buildPartA(); builder.buildPartB(); } }
调用:
Director director = new Director(); Builder builder = new ConcreteBuilder(); director.construct(builder); Product product = builder.create(); product.show();
建造者模式是在当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时适用的模式。
相关文章推荐
- 1028. 人口普查(20)
- 前端冷知识,妙用浏览器地址栏
- C++中的new和delete操作符
- 堆(heap)与栈(stack)的区别
- NullPointerException 异常记录
- CGAffineTransform 用于视图平移,放缩,旋转
- LeetCode 335. Self Crossing
- Opencv--cvHoughLines2霍夫函数检测直线
- 【Android进阶】ScrollTricks介绍
- Android使用Intent在Activity之间传递对象[Serializable或者Parcelable]
- QQ第三方登录 Android和IOS平台共用一个appID
- ASP.NET MVC初识
- 使用openssl生成RSA公钥和私钥对
- 代码签名证书与数字签名常见10个问题
- mysql主从同步故障整理
- application*.xml
- 多个Excel根据两个同指标进行合并查询,处理。
- english
- DOORS中String与Text的区别
- speedtest_cli检测你服务器的实时带宽