设计模式05:建造者模式
来源:互联网 发布:舒柏奇犬 知乎 编辑:程序博客网 时间:2024/06/05 05:00
抽象一点说建造者模式的目的:
将一个复杂对象的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。——-《设计模式》GOF
举个例子,一台电脑的主板上有很多的硬件,可能根据需要要经常的更换。比如现在要将Intel的CPU换成AMD的,那么我们不需要从新的构建一块主板,而是只换CPU就可以了。这就是建造者模式需要达到的目的。整个建筑过程和具体的表示分离,建造过程指的是每个电脑主板都有cpu,表示指的是具体使用的CPU型号。很好理解,表示和建造过程实际上没有必然的联系,如果分离将增加很多的灵活性。
一般建造者模式包含以下几个类,Builder,product,Director,ConcreteBuilder。我们想象一个这样的场景。要建造一块主板,这个建造过程是可以确定的,不能确定的是各个零部件的生产厂家。Product就是主板,主板中包含了cpu,memory,io零部件。建造者只管建立这些零部件,Director负责将零部件组合到一起形成产品,并通过一个方法提供产品。
我们来看一下UML:
builder作为一个基本的建造者接口
public interface Builder { public void buildCPU(); public void buildMemory(); public void buildIO(); public Productor getProductor();}
SonyBuilder实现建造者接口
public class SonyBuilder implements Builder{ private Productor productor= new SonyProductor(); public void buildCPU() { productor.setCPU("sonyCPU"); } public void buildMemory() { productor.setMemory("sonyMemory"); } public void buildIO() { productor.setIo("sonyIO"); } public Productor getProductor(){ return productor; }}
SonyProductor继承productor
public class SonyProductor extends Productor{ public String getIo() { return io; } public void setIo(String io) { this.io = io; } public String getCPU(){ return this.cpu; } public void setCPU(String name){ this.cpu=name; } public String getMemory() { return memory; } public void setMemory(String memory) { this.memory = memory; }}
HuaweiBuilder实现建造者接口
public class HuaweiBuilder implements Builder {
private Productor productor = new HuaweiProductor();@Overridepublic void buildCPU() { productor.setCPU("huwei cpu");}@Overridepublic void buildMemory() { productor.setMemory("huwei memory");}@Overridepublic void buildIO() { productor.setIo("huwei io");}@Overridepublic Productor getProductor() { return productor;}
}
HuaweiProductor 继承productor类
public class HuaweiProductor extends Productor {
public String getIo() {
return io;
}
public void setIo(String io) {
this.io = io;
}
public String getCPU(){
return this.cpu;
}
public void setCPU(String name){
this.cpu=name;
}
public String getMemory() {
return memory;
}
public void setMemory(String memory) {
this.memory = memory;
}
}
Director中构建一个Productor(可以是索尼,也可以是华为)
public class Director {
public Productor Construction(Builder builder){
//建造顺序是由director决定的
builder.buildCPU();
builder.buildIO();
builder.buildMemory();
return builder.getProductor();
}
public static void main(String[] args){
Director dirctor = new Director();
Productor productor=dirctor.Construction(new SonyBuilder());
//显示建造的结果
System.out.println(productor.getCPU());
System.out.println(productor.getMemory());
System.out.println(productor.getIo());
productor = dirctor.Construction(new HuaweiBuilder()); //显示建造的结果 System.out.println(productor.getCPU()); System.out.println(productor.getMemory()); System.out.println(productor.getIo());}
}
运行结果:
sonyCPU
sonyMemory
sonyIO
huwei cpu
huwei memory
huwei io
- C#设计模式05-建造者模式
- 设计模式05:建造者模式
- 设计模式-------建造者
- 设计模式-建造者
- 建造者设计模式
- 建造者设计模式
- 建造者设计模式
- 设计模式-建造者
- 建造者设计模式
- 建造者设计模式
- 建造者设计模式
- [设计]建造者模式
- 设计模式:建造者模式
- 设计模式---建造者模式
- 设计模式---建造者模式
- 设计模式-----建造者模式
- 设计模式-【建造者模式】
- 设计模式--建造者模式
- codeforces796D Police Stations
- Android利用传感器实现-仿微信摇一摇
- Android中dp、dip、dpi、ppi、px、sp的区别
- Git 学习笔记 —— 一篇文章搞定Git、GitHub的理解和使用
- 文章标题
- 设计模式05:建造者模式
- display:table-cell的应用
- Selenium3 浅尝
- Easy-5
- Django 连接Mysql的方法及常见问题
- python乱码问题一览
- 欢迎使用CSDN-markdown编辑器
- 二叉树中序遍历非递归实现
- c++ 迭代器iterator 和 vector