设计模式——生成器模式
2015-12-13 16:01
519 查看
一、意图
将一个复杂对象的构建与它的表示分离,是的同样的构建过程可以创建不同的表示。生成器模式的一个最大特点是构建过程稳定(顺序),但是构造的具体细节不同。
二、适用性
以下情况适用于适用Builder模式: - 当创建复杂对象的算法应该独立于对象的组成部分以及它们的装配方式时。 - 当构建过程必须允许被构建的对象有不同的表示时。
三、UML图
四、参与者
Builder为创建一个Product对象的各个部件指定抽象接口
ConcreteBuilder
实现Builder接口以构造和装配该产品的各个部件
定义并明确它所创建的表示
提供一个检索产品的接口
Director
构造一个使用Builder接口的对象
Product
表示被构造的复杂对象
包含定义组成部件的类,包括将这些部件装被最终产品的接口
五、实现 (Java版)
public class Product { List<String> parts = new ArrayList<>(); public void Add(String part){ parts.add(part); } public void show(){ System.out.println("\n产品 创建-----"); for(String part: parts){ System.out.println(part); } } } public abstract class Builder { public abstract void BuildPartA(); public abstract void BuildPartB(); public abstract Product getResult(); } public class ConcreteBuilderA extends Builder{ private Product product = new Product(); @Override public void BuildPartA() { product.Add("部件A"); } @Override public void BuildPartB() { product.Add("部件B"); } @Override public Product getResult() { return product; } } public class ConcreteBuilderB extends Builder { private Product product = new Product(); @Override public void BuildPartA() { product.Add("部件X"); } @Override public void BuildPartB() { product.Add("部件Y"); } @Override public Product getResult() { return product; } } public class Director { public void construct(Builder builder) { builder.BuildPartA(); builder.BuildPartB(); } } public class Client { public static void main(String[] args) { Builder builder; Director director = new Director(); builder = new ConcreteBuilderA(); director.construct(builder); Product product1 = builder.getResult(); product1.show(); builder = new ConcreteBuilderB(); director.construct(builder); Product product2 = builder.getResult(); product2.show();; } }
参考:《设计模式》
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树