设计模式之建造者模式
2015-06-01 10:45
260 查看
建造者模式又叫生成器模式,定义如下:
将一个复杂对象的构造与它的表示分离,是的同样的构建过程 可以创建不同的表示
建造者模式的通用类图如下:
![](http://img.blog.csdn.net/20150601104658926?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhvdWh1YTAxMDQ=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
代码如下:
下面用一个画笔的例子来说明一下建造者模式,类图如下:
![](http://img.blog.csdn.net/20150601141619842?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhvdWh1YTAxMDQ=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
建造者模式大致的就是这样,可能这个例子不是很恰当,只是为了说明一下建造模式的场景,建造者模式和工厂模式很像,但是两者的关注点不同,工厂模式关注的是整体,我们可以想象成现实中的工厂,我们生产一辆汽车,工程模式生产出的汽车都是一样,它不会关注如何组装各个零件,但是建造者模式关注的零部件的组装,由于组装的不同顺序或者型号不同而产生的结果不同。
将一个复杂对象的构造与它的表示分离,是的同样的构建过程 可以创建不同的表示
建造者模式的通用类图如下:
代码如下:
public abstract class Bulider { // 设置产品的不同部分,即组装产品 public abstract void setPart(); // 返回产品 public abstract Product bulidPart(); }
public class ConcreteBuilder extends Bulider { private Product product=new Product(); /** * */ @Override public void setPart() { product.setPart1("xxxx"); product.setPart2("xxxx"); } /** * @return */ @Override public Product bulidPart() { return this.product; } }
public class Product { private String part1; private String part2; public String getPart1() { return part1; } public void setPart1(String part1) { this.part1 = part1; } public String getPart2() { return part2; } public void setPart2(String part2) { this.part2 = part2; } }
public class Director { private Bulider bulider = new ConcreteBuilder(); public Product getProduct() { bulider.setPart(); return bulider.bulidPart(); } }
下面用一个画笔的例子来说明一下建造者模式,类图如下:
public class PaintBrush { private String color = "黑色"; // 形状:入矩形、原型、直线等等 private String shape; public String getColor() { return color; } public void setColor(String color) { this.color = color; } public String getShape() { return shape; } public void setShape(String shape) { this.shape = shape; } }
public abstract class BrushBulider { // 组装画笔 public abstract void bulidPart(); //创建画笔 public abstract PaintBrush createPaintBrush(); }
public class LineBrush extends BrushBulider { private PaintBrush paintBrush = new PaintBrush(); /** * */ @Override public void bulidPart() { paintBrush.setColor("红色"); paintBrush.setShape("直线"); } /** * @return * */ @Override public PaintBrush createPaintBrush() { // TODO Auto-generated method stub return paintBrush; } }
public class CircleBrush extends BrushBulider { private PaintBrush paintBrush = new PaintBrush(); /** * */ @Override public void bulidPart() { paintBrush.setColor("黄色"); paintBrush.setShape("椭圆"); } /** * @return */ @Override public PaintBrush createPaintBrush() { // TODO Auto-generated method stub return paintBrush; } }
public class Director { public static void main(String[] args) { // 创建一个直线画笔 BrushBulider bulider = new LineBrush(); // 组装画笔 bulider.bulidPart(); // 生成画笔 PaintBrush paintBrush = bulider.createPaintBrush(); } }
建造者模式大致的就是这样,可能这个例子不是很恰当,只是为了说明一下建造模式的场景,建造者模式和工厂模式很像,但是两者的关注点不同,工厂模式关注的是整体,我们可以想象成现实中的工厂,我们生产一辆汽车,工程模式生产出的汽车都是一样,它不会关注如何组装各个零件,但是建造者模式关注的零部件的组装,由于组装的不同顺序或者型号不同而产生的结果不同。
相关文章推荐
- C语言 对输入的一个字符串进行排序
- 读书笔记:逆向思考的艺术
- 如何通过出色的设计让你的简历脱颖而出?
- 一个下载图片的小程序
- tcp有限状态机分析
- 电子词典的内存分配方式改进
- 结构体补齐与对齐
- 线程和进程的区别是什么?
- 浅析Android中的visibility属性
- 深入iOS开发-持续更新~
- cocos2d-x网络编程 连接php服务器笔记3
- 修改firebug字体
- MYSQL优化参考
- PostgreSQL远程连接配置
- 因为数据库正在使用,所以无法获得对数据库的独占访问权
- jquery对表单元素赋值
- extjs3.4+mysql+servlet的简单增删改查 分页
- 08、Spring_web.xml_DelegatingFilterProxy
- 代码小知识2
- iOS--二维码生成和扫描