《设计模式之禅》-建造者模式
建造者模式 又称为生成器模式(设计模式之禅 101-112页)
定义:
将一个复杂对象的构建与它的表示分开,使得同样的创建过程可以创建不同的表示
在建造者模式中,有如4个角色
Product 产品类
通常是实现了模板方法模式,也就是有模板方法和基本方法
Builder抽象创建者
规范产品的创建,一般由子类实现。
ConcreteBuilder具体创建者
实现抽象类定义的所有方法,并返回一个组建好的对象
Director导演类
负责安排已有的模块顺序,然后告诉Builder开始创建。
产品类
public class Product {public void doSomething(){//独立的业务处理}
}
抽象建造者
public abstract class Builder{//设计产品的不同部分,以获取不同的产品public abstract void setPart();//创建产品public abstract Product builProduct();
}
具体创建者
public class ConcreteProduct extends Builder {Private Product product = new Product();//设置产品零件public void setPart(){/** 产品类内的逻辑处理*///组建一个产品public Product buildProduct() {return product;}
}
注意:有多少个产品类就有多少个具体的创建者,而且这多个产品类具有相同接口或抽象类
导演类:
public class Director {private Builder builder = new ConcreteProduct();//构建不同的产品public Product getAProduct(){builder.setPart();/** 设置不同的零件,产生不同的产品*/return builder.buildProduct();}
}
优点:
封装性
使用建造者模式可以使客户端不必知道产品内部组成的细节,如例子中我们就不需要关心每一个具体的模型内部是如何实现的,产生的对象类型就是Product。
建造者独立,容易扩展
每个建造者相互独立,对系统的扩展非常有利
便于控制细节风险
由于具体的建造者是独立的,因此可以对建造过程逐步细化,而不对其他的模块产生任何的影响
使用场景
相同的方法,不同的执行顺序,产生不同的事件结果时,可以采用建造者模式
多个部件或者零件,都可以装配到一个对象中,但是产生的结果又不相同时
产品类非常复杂,或者产品类中的调用顺序不同产生了不同的效能
建造者模式和工厂方法非常相似,但是建造者模式最主要的功能是基本方法的调用顺序安排,也就是这些基本方法已经实现了,通俗来说就是零件的装配,顺序不同产生的对象也不同;而工厂方法则重点是创建,创建零件是它的主要职责,组装顺序则不是它关心的。
示例代码:
//抽象产品类
public abstract class AbstractProduct {ArrayList<String> list = new ArrayList();protected abstract void open();protected abstract void close();protected abstract void music();public final void run (){int size = this.list.size();for (int i=0; i<size;i++ ){String actionName = this.list.get(i);if (actionName.equalsIgnoreCase("open")){this.open();}else if (actionName.equalsIgnoreCase("close")){this.close();}else if (actionName.equalsIgnoreCase("music")){this.music();}}}public final void setList(ArrayList<String> list){this.list = list;}
}
//产品类
public class Product extends AbstractProduct{@Overridepublic void open(){System.out.println("打开手机");}@Overridepublic void close(){System.out.println("关闭手机");}@Overridepublic void music(){System.out.println("听音乐");}}
//抽象建造者
public abstract class Builder {//设计产品的不同部分,以获取不同的产品public abstract void setPart(ArrayList<String> list);//创建产品public abstract AbstractProduct builProduct();
}
//具体建造者
public class ConcreteProduct extends Builder{private AbstractProduct product = new Product();@Overridepublic void setPart(ArrayList<String> list) {this.product.setList(list);}@Overridepublic AbstractProduct builProduct() {return this.product;}
}
//导演类
public class Director {private ArrayList<String> list = new ArrayList<>();private Builder builder = new ConcreteProduct();//只开机和关机public AbstractProduct getMethod1(){this.list.clear();list.add("open");list.add("close");builder.setPart(list);return builder.builProduct();}//只开机和听音乐public AbstractProduct getMethod2(){this.list.clear();list.add("open");list.add("music");builder.setPart(list);return builder.builProduct();}//开机,关机,听音乐public AbstractProduct getMethod3(){this.list.clear();list.add("open");list.add("close");list.add("music");builder.setPart(list);return builder.builProduct();}
}
public class main {public static void main(String[] args) {Director director = new Director();director.getMethod1().run();System.out.println("----------------");director.getMethod2().run();System.out.println("----------------");director.getMethod3().run();}
}
由于demo代码比较多 如果需要的话 可以去下载我写的demo
demo: https://gitee.com/minstrel01/Design-Pattern-demo.git builder_pattern
《设计模式之禅》-建造者模式相关推荐
- 设计模式之路 | 建造者模式
模式的定义与特点 建造者(Builder)模式的定义:指将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式.它是将一个复杂的对象分解为多个简单的对象 ...
- 设计模式系列之建造者模式构建实体类
设计模式系列之建造者模式(Build Pattern)构建实体类 模式定义 建造者模式属于23种设计模式中的创建型模式,可以理解为创建对象的一种很好的方法. 所谓建造者模式就是**将组件和组件的组件过 ...
- 设计模式---5(建造者模式的概念及其实现,建造者模式的角色与职责,建造者模式和工厂模式的区别)
建造者模式 建造者模式的概念 Builder 模式也叫建造者模式或者生成器模式,是由 GoF 提出的 23 种设计模式中的一种. Builder 模式是一种对象创建型模式之一,用来隐藏复合对象的创建过 ...
- Java 设计模式情景分析——建造者模式
当我们遇到类似汽车的装配,需要车轮.方向盘.发动机,还有各种小零件时,为了在构建过程中隐藏实现细节,就可以使用建造者模式 (Builder模式) 将部件和组装过程分离,使得构建过程和部件都可以自由扩展 ...
- 设计模式二:建造者模式
建造者模式 想要创建一个由多个部分构成的对象,而且他的构成需要一步接一步地完成.只有当各个部分都创建好,这个对象才是完整的.这时就需要建造者模式 建造者设计模式:将一个复杂对象的构造过程与其表现分离, ...
- Java设计模式10,建造者模式
目录 一.建造者模式 二.建造者模式的结构 1.抽象建造者(Builder) 2.具体建造者(ConcreteBuilder) 3.指挥者(Director) 4.产品(Product) 三.建造者模 ...
- 【设计模式自习室】建造者模式
前言 <设计模式自习室>系列,顾名思义,本系列文章带你温习常见的设计模式.主要内容有: 该设计模式的详细介绍,包括: 引子,意图(大白话解释) 类图,时序图(理论规范) 该模式的代码示例: ...
- 设计模式 之美 -- 建造者模式
文章目录 1. 解决问题 2. 应用场景 3. 实现 C语言实现 C++实现 4. 缺点 1. 解决问题 描述如下场景: 类的数据成员很多(8个以上),当我们进行初始化的时候放在初始化列表中,影响类的 ...
- 设计模式入门:建造者模式
UML类图 建造者模式 代码示例 Product /*** 表示具体的产品,由多个部件组成*/ public class Product {/*** 存放产品每个部件的集合*/private List ...
- Net设计模式实例之建造者模式(Builder Pattern)(2)
四.案例分析(Example) 1.场景 假设房子只有房顶和墙(Roof And Walls)<?XML:NAMESPACE PREFIX = O /> Jane和 Joe两个客户需要从建 ...
最新文章
- Oracle创建自增字段方法-ORACLE SEQUENCE的简单介绍
- 《系统集成项目管理工程师》必背100个知识点-30工作分解结构(WBS)分解形式
- Linux问题分析与性能优化
- python测试代码性能_使用python timeit 模块检测代码性能
- linux tcp在传输数据的时候断网了_选择最合适的协议 让传输数据更灵敏
- 2019蓝桥杯省赛---java---C---9(等差数列)
- 被裁半年后进大厂,他咋做到的?
- UTF-8, ASCII, Unicode的介绍与区分
- UVA 10118 Free Candies
- [转]《编程之道》(很老的一篇文章)
- python飞机大战游戏素材_python实现飞机大战小游戏
- Servlet的原理是什么?
- Post 请求调试工具简介
- 人脸识别项目的测试用例
- python教你生成动态二维码
- 队列练习之Example004-设计一个循环队列,用 front 和 rear 分别作为队头和队尾指针,另外用一个标志 tag 表示队列是空还是不空
- 有 1000 瓶药物,但是其中有一瓶是有毒的,老鼠只要服用任意量有毒药水就会在一个星期内死掉!请问,在一个星期后找出有毒的药物,最少需要多少只小白鼠?
- Timus Online Judge 2045 Richness of words
- Python之Scikit-Learm
- 一键连接wifi就靠它,还能查看wifi密码
热门文章
- 1.pymysql Warning: (1366, Incorrect string value: '\\xD6\\xD0\\xB9\\xFA\\xB1\\xEA...' 解决办法
- “听声避险”?这个AI可精确辩声 帮助防盗和规避交通事故
- spaceclaim脚本(内摆线)
- 核心案例|国防科技大学虚实结合的无人机集群系统
- vue项目中Des的加密解密
- DCDC电源测试以及纹波测试方法
- 生鲜蔬菜生产称重管理系统
- vue 里怎么用 lottie-web 实现动画效果?
- 计算机应用基础word优质课,《计算机应用基础》公开课教案
- php php_zip.dll,php_zip.dll下载|