(创建型模式)建造者模式
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(创建型模式)建造者模式相关的知识,希望对你有一定的参考价值。
一、建造者模式(Builder Pattern):
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式是一种对象创建型模式。
二、应用场景:
建立一个复杂产品,根据产品的类型决定实例化产品的结果,不需要考虑产品的构想过程。
三、应用实例:
动物界的掌控者Tom,觉得出门走入太慢了,想建造一些车代步,但是目前还没有想好什么类型的车,建立一个车辆建造中心,能根据Tom大哥的车型要求,制造出指定的车型。(要求:具体的车型易扩展)
四、方案:
UML图:
代码:
package com.yq.test; /** * Created by yq on 2016/11/23. */ public class Car { private Model model; private Tire tire; private Door door; private Engine engine; public Model getModel() { return model; } public void setModel(Model model) { this.model = model; } public Tire getTire() { return tire; } public void setTire(Tire tire) { this.tire = tire; } public Door getDoor() { return door; } public void setDoor(Door door) { this.door = door; } public Engine getEngine() { return engine; } public void setEngine(Engine engine) { this.engine = engine; } }
复杂产品-车
package com.yq.test; /** * Created by yq on 2016/11/23. */ public class Model { public Model(String str) { System.out.println("型号:" + str); } }
产品组件-车型
package com.yq.test; /** * Created by yq on 2016/11/23. */ public class Tire { public Tire(String str) { System.out.println("轮胎:" + str); } }
产品组件-轮胎
package com.yq.test; /** * Created by yq on 2016/11/23. */ public class Door { public Door(String str) { System.out.println("车门:" + str); } }
产品组件-车门
package com.yq.test; /** * Created by yq on 2016/11/23. */ public class Engine { public Engine(String str) { System.out.println("引擎:" + str); } }
产品组件-引擎
package com.yq.test; /** * Created by yq on 2016/11/23. */ public abstract class BuildCar { protected Car car = new Car(); public abstract void buildModel(); public abstract void buildTire(); public abstract void buildDoor(); public abstract void buildEngine(); public Car buildCar() { return car; } }
抽象建造者-生产车厂
package com.yq.test; /** * Created by yq on 2016/11/23. */ public class AudiCar extends BuildCar { @Override public void buildModel() { car.setModel(new Model("奥迪")); } @Override public void buildTire() { car.setTire(new Tire("米其林")); } @Override public void buildDoor() { car.setDoor(new Door("单门")); } @Override public void buildEngine() { car.setEngine(new Engine("A6发动机")); } }
具体建造者-奥迪厂
package com.yq.test; /** * Created by yq on 2016/11/23. */ public class BenzCar extends BuildCar { @Override public void buildModel() { car.setModel(new Model("奔驰")); } @Override public void buildTire() { car.setTire(new Tire("阿莫西林")); } @Override public void buildDoor() { car.setDoor(new Door("双门")); } @Override public void buildEngine() { car.setEngine(new Engine("N3发动机")); } }
具体建造者-奔驰厂
package com.yq.test; /** * Created by yq on 2016/11/23. */ public class CarManager { public Car getCar(BuildCar buildCar) { buildCar.buildModel(); buildCar.buildTire(); buildCar.buildDoor(); buildCar.buildEngine(); Car car = buildCar.buildCar(); return car; } }
指挥者-车辆制造指挥中心
package com.yq.test; /** * Created by yq on 2016/11/23. */ public class CarClient { public static void main(String[] args) { CarManager cm = new CarManager(); System.out.println("=========audi========="); Car audi = cm.getCar(new AudiCar()); System.out.println(" "); System.out.println("=========benz========="); Car benz = cm.getCar(new BenzCar()); } } //output =========audi========= 型号:奥迪 轮胎:米其林 车门:单门 引擎:A6发动机 =========benz========= 型号:奔驰 轮胎:阿莫西林 车门:双门 引擎:N3发动机
客户端调用-客户订制车
备注:客户端只需实例化指挥者类,指挥者类针对抽象建造者编程,客户端根据需要传入具体的建造者类型,指挥者将指导具体建造者一步一步构造一个完整的产品。
如果要扩展具体的车场,只需新增一个具体建造者类继承抽象建造者BuildCar即可,符合开闭原则。
以上内容,纯属个人见解,如有错误,望不吝指正。
以上是关于(创建型模式)建造者模式的主要内容,如果未能解决你的问题,请参考以下文章