[设计模式] - No.3 建造者模式
2017-05-20 10:55
274 查看
今天学习了设计模式中的建造者模式(Builder Pattern),这个模式也是属于四种设计模式中的创建型模式,四种模式如下所示:
建造者模式结构图如下:
在建造者模式中,我们需要用到四种角色:
1. Director:指挥者,根据用户需求来构建小人对象
2. Builder:建造者接口,用于创造Product各个部件指定的接口。内含建造Product的方法
3. ConcretedBuilder:实现Builder接口,用于构造和装配各个部件
4. Product:具体产品
总结构建者模式:将一个复杂对象的构建和他的表示分离,使得同样的构建过程可以创建不同的表示。
下面我们就以建造汽车的例子来示范一下建造者模式:
Car代码:
在主类中调用代码:
小思考:在我看来,建造者模式,每次只能返回一个对象。并且由于返回的对象和建造者模式是耦合的,如果我们想要多个Product对象,就必须实现Product类的Deep Copy。所以,我想能否将建造者函数内部的Product 改为传参,然后对引用对象进行加工呢?
就好像去饭店自带食材,因为厨师只有一份食材哈哈~
本文GitHub源码下载
P.S.文章不妥之处还望指正
建造者模式结构图如下:
在建造者模式中,我们需要用到四种角色:
1. Director:指挥者,根据用户需求来构建小人对象
2. Builder:建造者接口,用于创造Product各个部件指定的接口。内含建造Product的方法
3. ConcretedBuilder:实现Builder接口,用于构造和装配各个部件
4. Product:具体产品
总结构建者模式:将一个复杂对象的构建和他的表示分离,使得同样的构建过程可以创建不同的表示。
下面我们就以建造汽车的例子来示范一下建造者模式:
Car代码:
/** * Created by YanMing on 2017/5/20. */ public class Car { public String wheel; public String body; public String brand; public void setCarWheel(String wheel){ this.wheel = wheel; } public void setCarBody(String body){ this.body = body; } public void setCarBrand(String brand){ this.brand = brand; } public void showMyCar(){ System.out.println("Brand: " + this.brand +"\n"+ "Body: " + this.body +"\n" + "Wheel: " + this.wheel + "\n"); } }Builer 接口:
/** * Created by YanMing on 2017/5/20. */ public interface CarBuilder { public void BuildeCarWheel(); public void BuildeCarBody(); public void BuildeCarBrand(); public Car FinishBuild(); }BenzBuilder 代码:(FordBuilder省略)
/** * Created by YanMing on 2017/5/20. */ public class BenzBuilder implements CarBuilder { Car benz = new Car(); @Override public void BuildeCarWheel() { System.out.println("Benz Wheel building!"); benz.setCarWheel("Benz Wheel"); } @Override public void BuildeCarBody() { System.out.println("Benz Body building!"); benz.setCarBody("Benz Body"); } @Override public void BuildeCarBrand() { System.out.println("Benz Brand building!"); benz.setCarBrand("Benz Brand"); } @Override public Car FinishBuild() { return benz; } }Director代码:
/** * Created by YanMing on 2017/5/20. */ public class CarDirector { public void Construct(CarBuilder cb){ cb.BuildeCarBrand(); cb.BuildeCarBody(); cb.BuildeCarWheel(); } }
在主类中调用代码:
/** * Created by YanMing on 2017/5/20. */ public class BuilderPattern { public static void main(String arrgs []){ CarDirector director = new CarDirector(); BenzBuilder benzBuilder = new BenzBuilder(); FordBuilder fordBuilder = new FordBuilder(); director.Construct(benzBuilder); Car benz = benzBuilder.FinishBuild(); benz.showMyCar(); } }运行结果:
小思考:在我看来,建造者模式,每次只能返回一个对象。并且由于返回的对象和建造者模式是耦合的,如果我们想要多个Product对象,就必须实现Product类的Deep Copy。所以,我想能否将建造者函数内部的Product 改为传参,然后对引用对象进行加工呢?
就好像去饭店自带食材,因为厨师只有一份食材哈哈~
本文GitHub源码下载
P.S.文章不妥之处还望指正
相关文章推荐
- [php]php设计模式 Builder(建造者模式)
- 设计模式C++实现(6)——建造者模式
- 步步为营 .NET 设计模式学习笔记 十、Builder(建造者模式)
- java 设计模式 学习笔记(11) 建造者模式
- 设计模式之(九、建造者模式Builder)
- 乐在其中设计模式(C#) - 建造者模式(Builder Pattern)
- 设计模式学习笔记——建造者模式(Builder Pattern)
- NET设计模式4--建造者模式(Builder Pattern)
- 步步为营 .NET 设计模式学习笔记 十、Builder(建造者模式)
- 设计模式5:Builder Pattern(建造者模式)
- .NET设计模式-建造者模式(Builder Pattern)
- 设计模式3(建造者模式)
- 设计模式(4)-建造者模式(Builder)
- 设计模式----建造者模式(Builder Pattern)
- 乐在其中设计模式(C#) - 建造者模式(Builder Pattern)
- 乐在其中设计模式(C#) - 建造者模式(Builder Pattern)
- 设计模式--建造者模式(builder)
- 设计模式之(四)--建造者模式(builder)
- 步步为营 .NET 设计模式学习笔记 十、Builder(建造者模式)
- 设计模式(6)-建造者模式(Builder)