设计模式->创建型模式->建造者模式
来源:互联网 发布:苹果清除app缓存数据 编辑:程序博客网 时间:2024/06/04 19:45
1.定义:将一个复杂对象的创建和表示分离,是相同的构建过程产生构建出不同的表示。该模式倾向于流程抽象
2.UML
3.理论基础:继承,抽象
4.涉及角色:
抽象构建者:定义了构建某类抽象产品的具体流程。属于流程的抽象。因为产品是按照流程逐步构建的所以需要提供获得产品的访问点。总结作用主要有1.定义产品构建流程。2.提供获得产品访问点
具体构建者:抽象构建者的子类,针对于某个具体产品的构建流程
指挥者:不管是采用属性还是api参数的形式,该类都会持有抽象建造者的实例。采用多态的方式完成产品的构建。在指挥者中规定了产品的构建流程。产品的构建就是在指挥者中完成的
抽象产品:抽象产品,客户端通过访问点获得产品为抽象产品类型
具体产品:抽象产品的子类
5.优点
1.建造代码和表示代码分离
2.建造者隐藏了产品的组装流程。客户端不需要关注产品的组装过程,只需要消费对象
3.方便扩展。遵守开闭原则。如果产品的内部表示发生变化,只需要再定义一个具体的构建者
4.具体建造者相互对立,也就是说可以在具体的建造者中进行流程的细化
5.流程固定,具体细节可以延迟到子类
6.缺点
1. 由于建造社属于流程抽象,需要对流程抽象。抽象流程将是难点。如果流程抽象的不具有一般性或者通用性。后续对流程的修改回比较麻烦
7.使用场景
1.创建复杂对象,对象的内部组成的建造顺序是稳定的,但是具体到某个对象的内部组成面临者复杂的变化
2.创建过程独立于对象的组成也独立于组成部分的装配
8. Code
流程抽象IBuilder
public interface IBuyHouse { //选择楼盘 public void choiceBuilding(); //在给定的楼盘中选择价格 public void choicePrice(); //砍价 public int bargain(); //交首付 public int payments(); //签合同 public void signContract(); //验收 public boolean checkHouse(); //获得房子 public IHouse getHouse();}
//具体建造者
public class BuyHDHouse implements IBuyHouse { //具体产品,在该建造者中实现该产品的组装 private HDHouse hdHouse = new HDHouse(); @Override public void choiceBuilding() { //TODO 完成具体产品的部分组装 System.out.println("选择HD楼盘"); } @Override public void choicePrice() { //TODO 完成具体产品的部分组装 System.out.println("预售价格: 9500"); } @Override public int bargain() { //TODO 完成具体产品的部分组装 System.out.println("成交价格: 9000"); return 9000; } @Override public int payments() { //TODO 完成具体产品的部分组装 System.out.println("首付款: 22W"); return 220000; } @Override public void signContract() { //TODO 完成具体产品的部分组装 System.out.println("和建行签合同"); } @Override public boolean checkHouse() { //TODO 完成具体产品的部分组装 System.out.println("验收房子:通过"); return true; } @Override public IHouse getHouse() { //完成组装后获得产品 return hdHouse; }}
public class BuyWKHouse implements IBuyHouse { //具体产品,在该建造者中实现该产品的组装 private WKHouse wkHouse = new WKHouse(); @Override public void choiceBuilding() { //TODO 完成具体产品的部分组装 System.out.println("选择WK楼盘"); } @Override public void choicePrice() { //TODO 完成具体产品的部分组装 System.out.println("预售价格: 11000"); } @Override public int bargain() { //TODO 完成具体产品的部分组装 System.out.println("成交价格: 10000"); return 9000; } @Override public int payments() { //TODO 完成具体产品的部分组装 System.out.println("首付款: 30W"); return 300000; } @Override public void signContract() { //TODO 完成具体产品的部分组装 System.out.println("和招商签合同"); } @Override public boolean checkHouse() { //TODO 完成具体产品的部分组装 System.out.println("验收房子:不通过"); return true; } @Override public IHouse getHouse() { //完成组装后获得产品 return wkHouse; }}
//指挥者
public class Director { public void buyHouse(List<IBuyHouse> buyHouses) { for (IBuyHouse buyHouse : buyHouses) { buyHouse.choiceBuilding(); buyHouse.choicePrice(); buyHouse.bargain(); buyHouse.payments(); buyHouse.signContract(); buyHouse.checkHouse(); System.out.println("流程结束,获得房子"); System.out.println(); } }}
//抽象产品
public abstract class IHouse {}
//具体产品
public class HDHouse extends IHouse { //TODO 实现逻辑}public class WKHouse extends IHouse { //TODO 实现逻辑}
//客户端
public class Client { public static void main(String[] args) { List<IBuyHouse> list = new ArrayList<IBuyHouse>(); IBuyHouse hdHouse = new BuyHDHouse(); IBuyHouse wkHouse = new BuyWKHouse(); list.add(hdHouse); list.add(wkHouse); Director director = new Director(); director.buyHouse(list); System.out.println("get house: " + hdHouse.getHouse()); System.out.println("get house: " + wkHouse.getHouse()); }}
0 0
- 创建型设计模式-建造者模式
- 【JavaScript设计模式】创建型设计模式--建造者模式
- (C++设计模式) ------建造者模式Builder -- 创建型模式
- 设计模式-创建型模式#建造者模式Builder
- 设计模式 - 创建型模式 - 建造者模式
- 设计模式之创建型模式---建造者模式
- 设计模式->创建型模式->建造者模式
- Java设计模式之创建型模式--建造者模式
- 【23种设计模式】创建型模式 > 建造者模式
- [设计模式-创建型]建造者(Builder)
- 设计模式-创建型04-建造者
- 创建型设计-建造者模式
- 创建型设计模式-建造者设计模式
- 23种设计模式四:创建型建造者模式
- 设计模式6:建造者模式【创建型】
- 创建型设计模式(5):建造者模式
- 设计模式--建造者模式Builder(创建型)
- 设计模式(创建型)之建造者模式(Builder Pattern)
- 闭包(未写完整)
- 二维数组中的查找
- 关于RSA非对称加密相关概念整理
- zhishu
- Session ID/session token 及和cookie区别
- 设计模式->创建型模式->建造者模式
- /bin、/sbin、/usr/bin、/usr/sbin 目录所放置的执行文件区别
- js中splice对数组的操作
- 图像处理 去模糊 去马赛克 软件
- 可变参数列表详解
- 用贪心算法背包问题,Java实现
- C语言小白归并排序
- Python 数字对象
- XMU 1613 刘备闯三国之三顾茅庐(一) 【并查集】