Java设计模式_(创建型)_建造者模式
来源:互联网 发布:优斗士网络推广效果 编辑:程序博客网 时间:2024/05/01 05:00
引用百科
建造者模式是设计模式的一种,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
实用范围
1 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
2 当构造过程必须允许被构造的对象有不同表示时。
角色
在这样的设计模式中,有以下几个角色:
1 builder:为创建一个产品对象的各个部件指定抽象接口。
2 ConcreteBuilder:实现Builder的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示,并 提供一个检索产品的接口。
3 Director:构造一个使用Builder接口的对象。
3、定义导演Directer角色管理创建
运行测试代码,输出
建造者模式是设计模式的一种,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
实用范围
1 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
2 当构造过程必须允许被构造的对象有不同表示时。
角色
在这样的设计模式中,有以下几个角色:
1 builder:为创建一个产品对象的各个部件指定抽象接口。
2 ConcreteBuilder:实现Builder的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示,并 提供一个检索产品的接口。
3 Director:构造一个使用Builder接口的对象。
4 Product:表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程,包含定义组成部件的类,包括将这些部件装配成最终产品的接口。
如:客户端有个需求是组装电脑Computer,客户的最终要求是交付一台组装好的电脑,他/她不关心具体的组装过程和需要的组件,然而电脑的组装需要依赖很多组件,比如CPU ,主板,显卡,内存、、、等等一些列组件;同时也需要一个组装流程,先做什么,再装什么,于是乎用到了建造者模式去实现;
这里我们就只用CPU和主板Board来进行创建电脑的实现,以创建者模式来实现电脑的组装;
关系实现如下:
具体代码例子如下:
1、定义builder抽象接口
//抽象建造者(Builder)角色:public interface Builder {//创建CPU组件public void createCpu();//创建主板组件public void createBoard();//.....//组装电脑public Computer buildComputer();}
//具体建造者(ComputerBuilder)角色public class ComputerBuilder implements Builder {private Computer computer;public ComputerBuilder() {computer = new Computer();}@Overridepublic void createCpu() {// TODO Auto-generated method stubCpu cpu = new Cpu(1,"intel 6700");computer.setCpu(cpu);}@Overridepublic void createBoard() {Board board = new Board(1,"联想");computer.setBoard(board);}@Overridepublic Computer buildComputer() {return computer;}}
3、定义导演Directer角色管理创建
//导演者(Director)角色public class ComputerDirector { public Computer createComputer(Builder bud) { bud.createCpu(); bud.createBoard(); return bud.buildComputer(); } }
4、相关业务实体类
public class Computer {// CPUprivate Cpu cpu;// 主板private Board board;public Cpu getCpu() {return cpu;}public void setCpu(Cpu cpu) {this.cpu = cpu;}public Board getBoard() {return board;}public void setBoard(Board board) {this.board = board;}}public class Cpu {private int id;private String name;public Cpu(int id, String name) {super();this.id = id;this.name = name;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}}public class Board {private int id;private String name;public Board(int id, String name) {super();this.id = id;this.name = name;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}}
5、客户端Client测试实现
public class Client {private static void build() {ComputerDirector cd = new ComputerDirector();Computer computer = cd.createComputer(new ComputerBuilder());System.out.println(computer.getCpu().getName());System.out.println(computer.getBoard().getName());}public static void main(String[] args) {build();}}
运行测试代码,输出
intel 6700
联想
引用说明:
客户端负责创建导演者和具体建造者对象。然后,客户端把具体建造者对象交给导演者,导演者操作具体建造者,开始创建产品。当产品完成后,建造者把产品返还给客户端。
导演者角色是与客户端打交道的角色。导演者将客户端创建产品的请求划分为对各个零件的建造请求,再将这些请求委派给具体建造者角色。具体建造者角色是做具体建造工作的,但是却不为客户端所知。
一般来说,每有一个产品类,就有一个相应的具体建造者类。这些产品应当有一样数目的零件,而每有一个零件就相应地在所有的建造者角色里有一个建造方法。
把创建具体建造者对象的任务交给客户端而不是导演者对象,是为了将导演者对象与具体建造者对象的耦合变成动态的,从而使导演者对象可以操纵数个具体建造者对象中的任何一个。
阅读全文
1 0
- Java设计模式_(创建型)_建造者模式
- java设计模式_建造者模式
- Java设计模式_创建型_建造模式_机器人的制造
- 23种设计模式(4)_创建型_建造者模式(Builder Pattern)
- 大话设计模式_建造者模式
- 设计模式07_建造者模式
- 设计模式_建造者模式
- 设计模式_建造者模式(6)
- 设计模式_建造者模式
- Java设计模式_(创建型)_单例模式
- Java设计模式_(创建型)_工厂模式
- Java设计模式_(创建型)_抽象工厂模式
- Java设计模式_(创建型)_原型模式
- 设计模式学习_建造者
- Java设计模式_创建模式_原型模式
- Java设计模式_创建模式_工厂模式
- Java设计模式_创建模式_生成器模式
- Java设计模式之创建型模式--建造者模式
- 排序算法(1)选择排序法
- 个人收藏(持续更新)
- “小程序”前景未明,战火却越燃越旺
- centos6.8 修改防火墙 开放端口 屏蔽ip
- 奥维奥快讯:SAP+锤子科技-一位成功的创业者背后总有一个SAP
- Java设计模式_(创建型)_建造者模式
- SPOJ
- VC中的lambda
- LeetCode 523. Continuous Subarray Sum
- Tensorflow 运算设备的配置
- 随笔----致曾经的寻知图
- SplSubject 内容产述
- Easy UI使用记录
- 基础Activity文件