设计模式 | 建造者模式/生成器模式(builder)
定义:
结构:(书中图,侵删)
实例:
package designpattern.builder; public class Computer {
public String computerCase;
public String monitor;
public String keyboard;
public String mouse; public String getComputerCase() {
return computerCase;
} public void setComputerCase(String computerCase) {
this.computerCase = computerCase;
} public String getMonitor() {
return monitor;
} public void setMonitor(String monitor) {
this.monitor = monitor;
} public String getKeyboard() {
return keyboard;
} public void setKeyboard(String keyboard) {
this.keyboard = keyboard;
} public String getMouse() {
return mouse;
} public void setMouse(String mouse) {
this.mouse = mouse;
} @Override
public String toString() {
return "Computer [computerCase=" + computerCase + ", monitor=" + monitor + ", keyboard=" + keyboard + ", mouse="
+ mouse + "]";
} }
package designpattern.builder; public interface ComputerBuilder {
void assembleComputerCase(Computer computer);// 组装主机 void assembleMonitor(Computer computer);// 组装显示器 void assembleKeyboard(Computer computer);// 组装键盘 void assembleMouse(Computer computer);// 组装显示器
}
package designpattern.builder; public class GameComputerBuilder implements ComputerBuilder {
@Override
public void assembleComputerCase(Computer computer) {
computer.setComputerCase("水冷机箱");
} @Override
public void assembleMonitor(Computer computer) {
computer.setMonitor("4k显示器");
} @Override
public void assembleKeyboard(Computer computer) {
computer.setKeyboard("机械键盘");
} @Override
public void assembleMouse(Computer computer) {
computer.setMouse("人体工学鼠标");
} }
package designpattern.builder; public class AmusementComputerBuilder implements ComputerBuilder { @Override
public void assembleComputerCase(Computer computer) {
computer.setComputerCase("普通机箱");
} @Override
public void assembleMonitor(Computer computer) {
computer.setMonitor("普通显示器");
} @Override
public void assembleKeyboard(Computer computer) {
computer.setKeyboard("普通键盘");
} @Override
public void assembleMouse(Computer computer) {
computer.setMouse("普通鼠标");
} }
package designpattern.builder; public class ComputerBuilderDirect { public void assembleComputer(ComputerBuilder computerBuilder, Computer computer) {
computerBuilder.assembleComputerCase(computer);
computerBuilder.assembleMonitor(computer);
computerBuilder.assembleKeyboard(computer);
computerBuilder.assembleMouse(computer);
} // 或者写成下面这样?可能具体情况具体分析吧 public Computer assembleComputer(ComputerBuilder computerBuilder) {
Computer computer = new Computer();
computerBuilder.assembleComputerCase(computer);
computerBuilder.assembleMonitor(computer);
computerBuilder.assembleKeyboard(computer);
computerBuilder.assembleMouse(computer);
return computer;
}
}
package designpattern.builder; public class Client {
public static void main(String[] args) {
ComputerBuilderDirect computerBuilderDirect = new ComputerBuilderDirect();
// 组装游戏型电脑
Computer gameComputer = new Computer();
computerBuilderDirect.assembleComputer(new GameComputerBuilder(), gameComputer);
System.out.println("游戏型电脑:");
System.out.println(gameComputer);
// 组装普通娱乐型电脑
Computer assembleComputer = new Computer();
computerBuilderDirect.assembleComputer(new AmusementComputerBuilder(), assembleComputer);
System.out.println("普通娱乐型电脑:");
System.out.println(assembleComputer);
}
}
游戏型电脑:
Computer [computerCase=水冷机箱, monitor=4k显示器, keyboard=机械键盘, mouse=人体工学鼠标]
普通娱乐型电脑:
Computer [computerCase=普通机箱, monitor=普通显示器, keyboard=普通键盘, mouse=普通鼠标]
总结:
设计模式 | 建造者模式/生成器模式(builder)的更多相关文章
- 设计模式(4)建造者模式/生成器模式(Builder)
设计模式(0)简单工厂模式 设计模式(1)单例模式(Singleton) 设计模式(2)工厂方法模式(Factory Method) 设计模式(3)抽象工厂模式(Abstract Factory) 源 ...
- 设计模式 — 建造者(生成器)模式(Builder)
考虑这样一种业务场景,我们构建一个业务对象,但是这个业务对象及其复杂.为了代码的根号的可读性,我们会把这个对象的构建过程根据精密联系的程度来拆分成几个类来完成.最后再放到一起使用来生成复杂对象.这个业 ...
- Java设计模式之建造者模式(生成器模式)
建造者模式: 也叫生成器模式.用来隐藏复合对象的创建过程,他把复合对象的创建过程加以抽象,通过子类继承和重载的方式,动态地创建具有复合属性的对象. 总结一句就是封装一个对象的构造过程,并允许按步骤构造 ...
- 设计模式——建造者模式/生成器模式(C++实现)
#include <iostream> #include <string> using namespace std; class STProduct { public: voi ...
- 1.6建造者模式(生成器模式) Builder
1.概念:将一个复杂对象的构建和他的表示分离,使得同样的构件可以创建不同的表示. 2.实例:肯德基和中餐,肯德基抽象了整个做菜的复杂过程(相同的构建),然后在不同的店铺进行实现(不同的表示).中餐往往 ...
- 【设计模式】- 生成器模式(Builder)
生成器模式 建造者模式.Builder 生成器模式 也叫建造者模式,可以理解成可以分步骤创建一个复杂的对象.在该模式中允许你使用相同的创建代码生成不同类型和形式的对象. 生成器的结构模式 生成器(Bu ...
- 设计模式十: 生成器模式(Builder Pattern)
简介 生成器模式属于创建型模式的一种, 又叫建造者模式. 生成器模式涉及4个关键角色:产品(Product),抽象生成器(builder),具体生成器(ConcreteBuilder),指挥者(Dir ...
- C#设计模式——生成器模式(Builder Pattern)
一.概述在软件系统中,有时候面临着复杂的对象创建,该对象由一定算法构成的子对象组成,由于需求变化,这些子对象会经常变换,但组合在一起的算法却是稳定的.生成器模式可以处理这类对象的构建,它提供了一种封装 ...
- Java 设计模式系列(四)生成器模式
Java 设计模式系列(四)生成器模式 生成器模式也称之为建造者模式.将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示.demo 1. 生成器模式原理 1.1 生成器模式结构 ...
随机推荐
- python+selenium 环境搭建以及元素定位
在给公司同事给培训了WEB自动化框架,现在和大家分享交流下
- C#现代代码风格指南
参考资料: asp.net 主页仓库 代码风格 -- 一般原则 最通用的指导原则是我们使用所有的VS默认设置的代码格式,除了我们把系统命名空间放在其他命名空间之前(这在VS中是默认的,但是在VS的更新 ...
- 前端leader找我谈心:我是如何从刚毕业的前端菜鸟一步步成长为前端架构师的?
谈谈学习 我做前端已经有五年的时间了,从大学刚毕业的时候,我是一个完全什么都不懂的小白.虽然我大学里学的是软件工程专业,但是因为在大学里荒废学业,每天只知道打游戏,基本上到大学毕业之前我是什么都不会的 ...
- [CVPR 2016] Weakly Supervised Deep Detection Networks论文笔记
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px "Helvetica Neue"; color: #323333 } p. ...
- ruby klb.rb irb
1.字符串格式化 Python "%s=%s" % (k, v) 在阅读 Python 字符串格式化的时候,视线先看到字符串的 %s 字样,但是不知道这指的是什么,然后看后面的变量 ...
- HTTP协议GET HEAD简单介绍
一.HTTP协议简介 超文本传输协议(Hypertext Transfer Protocol,简称HTTP)是应用层协议,自 1990 年起,HTTP 就已经被应用于 WWW 全球信息服务系统. HT ...
- 项目开发中如何规范自己的CSS
1.CSS规范 - 分类方法 CSS文件的分类和引用顺序 通常,一个项目我们只引用一个CSS,但是对于较大的项目,我们需要把CSS文件进行分类. 我们按照CSS的性质和用途,将CSS文件分成“公共型样 ...
- js判断浏览器是否支持flash的方法
传统浏览器可以使用window.ActiveXObject检查浏览器是否启用相关的控件.检查浏览器是否启用flash控件,需要先检查浏览器是否支持ActiveXObject,可以使用typeof检查w ...
- onCreate和onStart谁的开销大?
大家都知道,onCreate方法在创建的时候开始调用一些方法来获取资源方面的东西,这个是在程序运行之初才执行的,一个完整的生命周期中,它只执行了一次,不被onDestroy掉,就一直不调用,而onSt ...
- Linux的文本处理工具浅谈-awk sed grep
Linux的文本处理工具浅谈 awk 老大 [功能说明] 用于文本处理的语言(取行,过滤),支持正则 NR代表行数,$n取某一列,$NF最后一列 NR==20,NR==30 从20行到30行 FS ...