JAVA设计模式(六)——建造者模式
来源:互联网 发布:eva新剧场版知乎 编辑:程序博客网 时间:2024/06/16 08:14
1、建造者模式
建造者模式又被成为生成器模式,是GoF提出的23种设计模式种的一种。
建造者模式是一种对象创建型的模式,用来隐藏复合对象的创建过程,他把复合对象的创建过程加以抽象,通过子类的继承或者重载,动态的创建具有复合属性的对象。在经典的GoF设计种,将之定义为:是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
2、结构示意图
这里有衣服图示说明,额,这个图是我从网上copy来的,不是原创,我只是对此加了一些说明而已:
builder:给出一个抽象接口,以规范产品对象的各个组成成分的建造。下面我们会举例说明,抽象的接口只提供方法名称,不提供实现。
ConcreteBuilder:实现Builder接口,针对不同的业务逻辑,具体化复杂对象的各部分的创建。在这里,我们要在创建完产品之后,提供产品的实例对象。
Director:调用具体建造者来创建复杂对象的各个部分,在指导者中不涉及具体产品的信息,只负责保证对象各部分完整创建或按某种顺序创建。
Product:要创建的复合对象,应该具有多种类型,下面我们会举例说明。
3、应用场景
(1)、对象的创建,建造者模式是为了创建对象而存在的
(2)、创建的是复合对象,复合对象就是很多个对象具有复合属性
(3)、关注对象创建的各个部分的创建过程,不同的工厂对产品的属性有不同的创建方法
4、代码展示
一个抽象接口类:
public interface HouseBuilder {/** * 修理地板 */public void fixFloor();/** * 修理墙壁 */public void fixWall();/** * 修理屋顶 */public void fixTop();/** * 获得house这个对象 * @return */public House getHouse();}
一个抽象类的实现类,这里可以看作是一个具体的对象:
/** * 普通房屋建造者 * * @author ljtyzhr * */public class NormalBuilder implements HouseBuilder {House house = new House();@Overridepublic void fixFloor() {// TODO Auto-generated method stubhouse.setFloor("修理普通房屋的地板");}@Overridepublic void fixWall() {// TODO Auto-generated method stubhouse.setWall("修理普通房屋的墙壁");}@Overridepublic void fixTop() {// TODO Auto-generated method stubhouse.setTop("修理普通房屋的屋顶");}@Overridepublic House getHouse() {return house;}}
实际的调用这,通过它我们调用了实际的操作对象:
public class HouseDirector {private HouseBuilder houseBuilder ;public HouseDirector(HouseBuilder houseBuilder) {super();this.houseBuilder = houseBuilder;}public void fixHouse(){houseBuilder.fixFloor();houseBuilder.fixWall();houseBuilder.fixTop();}}
产品对象,具备相应的属性和方法:
public class House {// 地板private String floor;// 墙壁private String wall;// 屋顶private String top;public String getFloor() {return floor;}public void setFloor(String floor) {this.floor = floor;}public String getWall() {return wall;}public void setWall(String wall) {this.wall = wall;}public String getTop() {return top;}public void setTop(String top) {this.top = top;}}
5、测试方法
这里提供测试方法,我们可以使用两种不同的方式进行比较,一种是普通模式,需要测试类自己去调用具体的方法,第二种是我们的建造者模式,降低耦合,代码:
public class MainClass {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stub// 1、普通模式//House house = new House();//house.setFloor("123");//house.setTop("456");//house.setWall("789");//System.out.println(house.getFloor());//System.out.println(house.getWall());//System.out.println(house.getTop());// 2、使用建造者模式HouseBuilder houseBuilder = new NormalBuilder();HouseDirector director = new HouseDirector(houseBuilder);director.fixHouse();House house = houseBuilder.getHouse();System.out.println(house.getFloor());System.out.println(house.getWall());System.out.println(house.getTop());}}
6、总结
其实也没有什么太多神秘的东西,跟我们在软件工程种学到的,高內聚,低耦合,其实就是这个道理。
- JAVA设计模式(六)——建造者模式
- java设计模式—建造者模式
- java设计模式—建造者模式
- Java设计模式—建造者模式
- Java设计模式——工厂模式,建造者模式
- 设计模式之六建造者模式
- 设计模式(六) 建造者模式
- java设计模式——建造者模式(Builder)
- java设计模式——建造者模式
- Java设计模式——建造者模式
- java设计模式——建造者模式(Builder Pattern)
- Java设计模式学习03——建造者模式
- java设计模式——建造者模式(Builder)
- Java设计模式之——建造者模式
- Java设计模式——建造者模式
- Java 设计模式情景分析——建造者模式
- 【Java设计模式03】——建造者模式
- Java设计模式(三)——建造者模式
- 1月8号14点———学习笔记
- dom4j 最常用最简单的用法(转)
- Python socket聊天室程序
- 1月8号14点———学习笔记
- Android开发中定时器的3种方法
- JAVA设计模式(六)——建造者模式
- Dynamically Loading Controllers and Views with AngularJS/$controllerProvider and RequireJS
- 如何在windows上编译Tesseract OCR
- 关于python中的编码问题
- 简单php登陆注册模块
- 百度地图api的简单应用
- 错别字分析——自建错词库
- 八领域边界追踪算法
- Linux下TCP输出打印消息