Java设计模式 -- 建造者模式
2016-03-23 16:19
471 查看
建造者模式
建造者模式就是一步一步的创建一个复杂的对象,而且允许用户指定复杂对象的类型和内容。建造者的模式结构一般如下图所示。Builder 类是一个抽象类,用于定义一些创建子部件的方法,Builder类中应该还有一个 getResult() 方法,用于将创建好的部件组装成一个产品返回。
Director 类又称为指挥者,用于安排复杂对象的建造次序,通过construct() 方法,指导Builder类完成组装。
通过一个例子来更好的理解建造者模式,比如说现在的手机都支持更换主题,所有的主题建造过程都是类似的,比如说更换图标,背景,提示音,那么这个时候就可以通过建造者模式来完成这一过程。
先来设计一下Product和Builder类
public class Product { private String mBackground; private String mIcon; private String mSounds; public String getBackground() { return mBackground; } public void setBackground(String background) { mBackground = background; } public String getIcon() { return mIcon; } public void setIcon(String icon) { mIcon = icon; } public String getSounds() { return mSounds; } public void setSounds(String sounds) { mSounds = sounds; } } public abstract class Builder { private Product mProduct = new Product(); public Product getResult(){ return mProduct; } public abstract void buildBackground(); public abstract void buildIcon(); public abstract void buildSounds(); }
可见,不论什么样的主题,以上代码都是通用的,对于不同的主题,只需要在ConcreteBuilder中进行设置就可以了。
public class ConcreteBuilder extends Builder{ public void buildBackground(){ mProduct.setBackground("Black"); } public void buildIcon(){ mProduct.setIcon("MyIcon"); } public void buildSounds(){ mProduct.setSounds("MySounds"); } }
既然产品生产过程已经构建出来了,那么就到了Director 类发挥作用的时候了,现在就由Director 来指挥各个部件的创造,并且将组装好的产品返回给客户端。
public class Director { public Product construct(Builder builder){ builder.buildBackground(); builder.buildIcon(); builder.buildSounds(); return builder.getResult(); } }
可见Director 类中只有一个简单的方法,有的时候当产品的部件不是很多的时候,完全可以将该方法放到Builder类中,从而省略Director 类。
已经看出,建造者模式和抽象工厂模式很类似。其实,抽象工厂模式更侧重于生产 “部件” , 而建造者模式侧重于将各个 部件组装成一个产品。
相关文章推荐
- 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简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树