建造者模式,属于创建型模式,其目的在于将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
适用情况:
- 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
- 当构造过程必须允许被构造的对象有不同的表示时。
类结构图如下所示
参与者
- Builder
— 为创建一个Product对象的各个部件指定抽象接口。
- ConcreteBuilder
— 实现Builder的接口以构造和装配该产品的各个部件。
— 定义并明确它所创建的表示。
— 提供一个检索产品的接口
- Director
— 构造一个使用Builder接口的对象。
- Product
— 表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程。
— 包含定义组成部件的类,包括将这些部件装配成最终产品的接口。
协作
- 客户创建Director对象,并用它所想要的Builder对象进行配置。
- 一旦产品部件被生成,导向器就会通知生成器。
- 生成器处理导向器的请求,并将部件添加到该产品中。
- 客户从生成器中检索产品
实现代码:
- package com.visionsky.DesignPattern;
-
- class Product
- {
- @Override
- public String toString() {
- return "Product";
- }
- }
-
- interface Builder
- {
- void BuildPart();
- }
-
- class ConcreteBuilder implements Builder
- {
-
- @Override
- public void BuildPart() {
-
- System.out.println("Building Product's part");
- }
-
- public Product GetResult()
- {
- System.out.println("Product's Building has finished");
- return new Product();
-
- }
- }
-
- class Director
- {
- public Product Construct(ConcreteBuilder cb)
- {
- cb.BuildPart();
- return cb.GetResult();
- }
- }
-
- public class BuilderDemo {
-
-
-
-
- public static void main(String[] args) {
-
- Director d=new Director();
- ConcreteBuilder cb=new ConcreteBuilder();
- Product p=d.Construct(cb);
- System.out.println(p);
- }
- }
生活中的例子:
在这里我们以造汽车为例子,汽车是由个很复杂的对象,有很多个子对象组成,如轮胎,引擎,车架等,所以为了造好一辆汽车,其子对象必须具备。
- package com.visionsky.DesignPattern;
-
-
- class Car{
-
- @Override
- public String toString() {
- return "汽车产品";
- }
- }
-
- interface IBuilder
- {
- void BuildWheel();
- void BuildCarFrame();
- void BuildEngine();
- }
-
- class CarBuilder implements IBuilder
- {
-
- private Car car=new Car();
- @Override
- public void BuildCarFrame() {
-
- System.out.println("建造汽车框架");
- }
-
- @Override
- public void BuildEngine() {
-
- System.out.println("建造汽车轮子");
- }
-
- @Override
- public void BuildWheel() {
-
- System.out.println("建造汽车引擎");
- }
-
- public Car CarBuildOver()
- {
- System.out.println("汽车组装完毕");
- return car;
- }
- }
-
- class CarDirector
- {
-
- public Car BuildCar(CarBuilder cb)
- {
- cb.BuildCarFrame();
- cb.BuildEngine();
- cb.BuildWheel();
- return cb.CarBuildOver();
- }
- }
-
- public class BuliderDemoInLife {
-
-
-
-
- public static void main(String[] args) {
-
- CarDirector cd=new CarDirector();
- Car c=cd.BuildCar(new CarBuilder());
- System.out.println(c);
- }
- }
版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章
原始出处 、作者信息和本声明。否则将追究法律责任。http://visionsky.blog.51cto.com/733317/385196
|