建造者模式
来源:互联网 发布:thinkphp商城源码 编辑:程序博客网 时间:2024/06/10 17:20
建造者模式
定义
将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。(创建型模式)
使用场景
1 创建一些复杂的对象时,这些对象的内部组成间的构建顺序是稳定的,但是对象的内部组成构件面临着复杂的变化。
2 要创建的复杂对象的算法,独立于该对象的组成部分,也独立与组成部分的装配方法时。
优点:
- 使用建造者模式可以让客户端不知道产品内部的组成细节.
- 具体的建造类之间是相互独立的,对系统的扩展是非常有利的.
- 由于具体的建造者是独立的,因此可以对建造过程逐步细化,而对其他的模块没有任何影响.
建造者模式一般包含的角色
- builder: 给出一个抽象接口,以规范产品对象的各个组成成分的建造.这个接口规定要实现负责对象的哪些部分的创建,不涉及具体对象部件的创建,
- ConcreteBuilder: 实现Builder接口,针对不同的商业逻辑,具体化复杂对象的各部分的创建.在建造过程完成后,提供产品实例.
- Director: 调用具体建造者来创建复杂对象的各个部分,在指导者中不涉及具体产品的信息,只负责保证对象各部分完整创建或按某顺序创建.
- Product: 要创建的负责对象.
Demo
如果要创建一个小人,肯定要创建人的头,身体,手,脚,现在系统将人分为胖人和瘦人,那么设计如下:
首先是Persion
package factory.pattern.Builder;import java.util.ArrayList;import java.util.List;/** * Created by fk5431 on 7/24/17. */public class Person { private List<String> parts = new ArrayList<String>(); public void Add(String part){ parts.add(part); } public void Show(){ for(String part : parts){ System.out.println(part); } }}
然后是Builder
package factory.pattern.Builder; /** * Created by fk5431 on 7/24/17. */ public interface Builder { void BuildHead(); void BuildBody(); void BuildHand(); void BuildFeet(); Persion getResult(); }
然后瘦人胖人类分别实现接口
package factory.pattern.Builder;/** * Created by fk5431 on 7/24/17. */public class FatPersonBuilder implements Builder { private Person product; public FatPersonBuilder(){ product = new Persion(); } public void BuildHead() { product.Add("胖人头"); } public void BuildBody() { product.Add("胖人身体"); } public void BuildHand() { product.Add("胖人手"); } public void BuildFeet() { product.Add("胖人脚"); } public Persion getResult() { return product; }}
package factory.pattern.Builder;/** * Created by fk5431 on 7/24/17. */public class ThinPersonBuilder implements Builder { Person product; public ThinPersonBuilder(){ product = new Persion(); } public void BuildHead() { product.Add("瘦人头"); } public void BuildBody() { product.Add("瘦人身体"); } public void BuildHand() { product.Add("瘦人手"); } public void BuildFeet() { product.Add("瘦人脚"); } public Persion getResult() { return product; }}
然后是指导者
package factory.pattern.Builder;/** * Created by fk5431 on 7/24/17. */public class Director { public Person person(Builder builder){ builder.BuildBody(); builder.BuildFeet(); builder.BuildHand(); builder.BuildHead(); return builder.getResult(); }}
最后测试一下
public class Test { public static void main(String[] args) { Director d = new Director(); Person p = d.person(new ThinPersonBuilder()); p.Show(); }}
代码都在github上,地址是fk5431
https://github.com/fk5431/designPatterns
阅读全文
1 0
- Builder 建造者模式
- 建造者模式
- 设计模式-------建造者
- 建造者模式
- 建造者模式(Builder)
- 建造者模式(Builder)
- 建造者模式
- 建造者模式 - builder
- 建造者模式
- Builder建造者模式
- 建造者模式(Builder)
- 建造者模式(builder)
- 建造者模式
- java建造者模式
- 建造者模式
- 建造者模式
- 建造者模式(Builder)
- 建造者模式
- 最终排名
- Quartz的基本配置
- DOM编程-样式操作
- 百练_2808:校门外的树
- 大端、小端存储以及典型例题分析
- 建造者模式
- JS中数组去重问题
- linux常用命令系列
- HashMap存储原理以及与hashcode、equals方法的关系
- HTTP协议中PUT和POST使用区别
- Java_基础—流的标准处理异常代码1.7版本
- PHP---wampserver安装PHP开发环境
- 大白话讲解Promise(一)
- numpy的random模块