设计模式之建造者模式
2017-05-09 00:00
141 查看
摘要: 建造者模式和工厂模式有点类似,都是用来创建对象的,但是工厂模式的核心在于创建对象,而建造者模式的核心在于创建这个对象的过程,注重是如何组装这个对象的。
建造者模式的主要涉及到的角色有:
产品类:一般是一个较为复杂的对象,也就是说创建对象的过程比较复杂,一般会有比较多的代码量。在本类图中,产品类是一个具体的类,而非抽象类。实际编程中,产品类可以是由一个抽象类与它的不同实现组成,也可以是由多个抽象类与他们的实现组成。
抽象建造者:引入抽象建造者的目的,是为了将建造的具体过程交与它的子类来实现。这样更容易扩展。一般至少会有两个抽象方法,一个用来建造产品,一个是用来返回产品。
建造者:实现抽象类的所有未实现的方法,具体来说一般是两项任务:组建产品;返回组建好的产品。
导演类:负责调用适当的建造者来组建产品,导演类一般不与产品类发生依赖关系,与导演类直接交互的是建造者类。一般来说,导演类被用来封装程序中易变的部分。
下面我们通过代码来简单的实现一个建造者模式:
产品基类:
产品子类:
抽象建造者:
具体建造者:
导演类:
测试类:
运行结果:
其实简单来说建造者就是用来创建一些比较复杂的对象的,将创建组装的过程进行抽象,例如StringBuilder就是一个建造者模式的体现。
建造者模式的主要涉及到的角色有:
产品类:一般是一个较为复杂的对象,也就是说创建对象的过程比较复杂,一般会有比较多的代码量。在本类图中,产品类是一个具体的类,而非抽象类。实际编程中,产品类可以是由一个抽象类与它的不同实现组成,也可以是由多个抽象类与他们的实现组成。
抽象建造者:引入抽象建造者的目的,是为了将建造的具体过程交与它的子类来实现。这样更容易扩展。一般至少会有两个抽象方法,一个用来建造产品,一个是用来返回产品。
建造者:实现抽象类的所有未实现的方法,具体来说一般是两项任务:组建产品;返回组建好的产品。
导演类:负责调用适当的建造者来组建产品,导演类一般不与产品类发生依赖关系,与导演类直接交互的是建造者类。一般来说,导演类被用来封装程序中易变的部分。
下面我们通过代码来简单的实现一个建造者模式:
产品基类:
public class Person { private String head; private String body; private String foot; public String getHead() { return head; } public void setHead(String head) { this.head = head; } public String getBody() { return body; } public void setBody(String body) { this.body = body; } public String getFoot() { return foot; } public void setFoot(String foot) { this.foot = foot; } }
产品子类:
public class Man extends Person{ public Man(){ System.out.println("开始构建男人"); } }
抽象建造者:
public abstract class Builder { public abstract void buildHead(); public abstract void buildBody(); public abstract void buildFoot(); public abstract Person getPerson(); }
具体建造者:
public class ManBuilder extends Builder{ private Person person; public ManBuilder() { person = new Man(); } @Override public void buildHead() { System.out.println("开始构建男人的头"); person.setHead("男人的头"); } @Override public void buildBody() { System.out.println("开始构建男人的身体"); person.setBody("男人的身体"); } @Override public void buildFoot() { System.out.println("开始构建男人的脚"); person.setFoot("男人的脚"); } @Override public Person getPerson() { return person; } }
导演类:
public class Director { private Builder builder; public Director(Builder builder){ this.builder = builder; } public Person constructPerson() { builder.buildHead(); builder.buildBody(); builder.buildFoot(); return builder.getPerson(); } }
测试类:
public class Test { public static void main(String[] args) { ManBuilder manBuilder = new ManBuilder(); Director director = new Director(manBuilder); director.constructPerson(); } }
运行结果:
开始构建男人 开始构建男人的头 开始构建男人的身体 开始构建男人的脚
其实简单来说建造者就是用来创建一些比较复杂的对象的,将创建组装的过程进行抽象,例如StringBuilder就是一个建造者模式的体现。
相关文章推荐
- 设计模式学习笔记之建造者模式
- 设计模式---建造者模式
- 设计模式之 建造者模式
- 设计模式:建造者模式
- 每天一设计模式之建造者模式
- C#设计模式之建造者(Builder)模式示例源代码
- .NET设计模式(4):建造者模式(Builder Pattern)
- 设计模式笔记(九) —— 建造者模式
- 设计模式之建造者模式
- 我读设计模式之建造者模式(Builder Pattern)
- C#设计模式之建造者(Builder)模式示例源代码
- .NET设计模式(4):建造者模式(Builder Pattern)
- 设计模式c#语言描述——建造者模式、适配器模式、合成(Composite)模式
- 设计模式---建造者(Builder)模式,有关系图
- .NET设计模式(4):建造者模式(Builder Pattern)
- .NET设计模式(4):建造者模式(Builder Pattern)
- Java设计模式-----Builder建造者模式
- .NET设计模式(4):建造者模式(Builder Pattern)
- DOTA版设计模式——建造者
- C#设计模式之建造者(Builder)模式示例源代码