设计模式学习笔记(5)建造者模式
2013-04-24 19:17
393 查看
建造者模式
Separate the construction of a complexobject from its representation so that the same construction process can createdifferent representations.
讲一个复杂对象的构建于它的表示分离,使得同样的构建过程可以创建不同的表示。
建造者中设计四个角色
抽象建造者(Builder)角色:该角色用于规范产品各个组成部分,并进行抽象,一般独立于应用程序的逻辑。
具体建造者(Concrete Bulider)角色;该角色实现抽象建造者中定义了所有方法,并且返回一个组建好的实例。
产品(Product)角色;该角色是建造中的复杂对象,一个系统中会有多余一个的产品类,这些产品类并不一定有共同的接口,完全可以是不相关连的。
导演者(Director)角色:该角色安排已有模块的顺序,然后告诉Bulider开始建造.
建造者模式的应用
1建造者模式的优点
封装性,使用建造者模式可以使客户端不必知道产品内部组成的细节
建造者独立,容易扩展
便于控制细节风险,由于具体的建造者是独立的,因此可以对建造过程逐步细化,而不对其他的模块产生任何影响。
2建造者模式的使用场景
相同的方法,不同的执行顺序,产生不同的结果时,可以采用建造者模式
多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不相同时,则可以使用该模式。
产品类非常复杂,或者产品类中的方法调用顺序不同,产生了不同的效能,这个时候使用建造者模式。
在对象创建过程中会使用到系统的一些其他对象,这些对象在产品对象的创建过程中不宜得到时,也可以采用建造者模式封装该对象的创建过程。该种场景智能是一个补偿方法,因为一个对象不容易获得,而在设计阶段没有发现,要通过创建者模式柔化创建过程,本省已经违反了设计的最初目标。
创建者模式关注的是零件类型和装配工艺顺序,这与工厂方法模式最大的不同之处,虽为创建者模式,但是重点不同。
public
abstract class Computer {
private String
type;
private String
cpu;
private String
ram;
private String
hardDisk;
private String
monitor;
private String
os;
public String getType() {
return
type;
}
public
void setType(String type) {
this.type = type;
}
public String getCpu() {
return
cpu;
}
public
void setCpu(String cpu) {
this.cpu = cpu;
}
public String getRam() {
return
ram;
}
public
void setRam(String ram) {
this.ram = ram;
}
public String getHardDisk() {
return
hardDisk;
}
public
void setHardDisk(String hardDisk) {
this.hardDisk = hardDisk;
}
public String getMonitor() {
return
monitor;
}
public
void setMonitor(String monitor) {
this.monitor = monitor;
}
public String getOs() {
return
os;
}
public
void setOs(String os) {
this.os = os;
}
}
public
interface Computerbulider {
void bulidCpu();
void bulidRam();
void bulidHarddisk();
void bulidGraphicCard();
void bulidMonitor();
void bulidOs();
Computer getResule();
}
public
class T410 extends Computer {
private String
graphicCard;//显卡
public String getGraphicCard() {
return
graphicCard;
}
public
void setGraphicCard(StringgraphicCard) {
this.graphicCard = graphicCard;
}
public T410(){
this.setType("ThinkpadT410i");
}
public String toString(){
return
"型号: \t"+this.getType()+"\nCPU:\t"+this.getCpu()
+"\n内存:\t"+this.getRam()+"\n硬盘:\t"+this.getHardDisk()
+"\n显卡:\t"+this.getGraphicCard()+"\n显示器\t"
+this
df3a
.getMonitor()+"\n操作系统"+this.getOs();
}
}
public
class X201 extends Computer {
public X201(){
this.setType("ThinkpadT410i");
}
public
StringtoString(){
return
"型号: \t"+this.getType()+"\nCPU:\t"+this.getCpu()
+"\n内存:\t"+this.getRam()+"\n硬盘:\t"+this.getHardDisk()
+"\n显示器\t"
+this.getMonitor()+"\n操作系统"+this.getOs();
}
}
public
class T410Bulider implements Computerbulider {
private T410
computer =new T410();
@Override
public
void bulidCpu() {
// TODO Auto-generatedmethod stub
computer.setCpu("i5-450");
}
@Override
public
void bulidRam() {
// TODO Auto-generatedmethod stub
computer.setRam("4G 1333MHZ");
}
@Override
public
void bulidHarddisk() {
// TODO Auto-generatedmethod stub
computer.setHardDisk("200G");
}
@Override
public
void bulidGraphicCard() {
// TODO Auto-generatedmethod stub
computer.setGraphicCard("Nvidia NVS 3100M");
}
@Override
public
void bulidMonitor() {
// TODO Auto-generatedmethod stub
computer.setMonitor("14英寸1280*800");
}
@Override
public
void bulidOs() {
// TODO Auto-generatedmethod stub
computer.setOs("Win7");
}
@Override
public Computer getResule() {
// TODO Auto-generatedmethod stub
return
computer;
}
}
public
class X201Bulider implements Computerbulider {
private X201
computer =new X201();
@Override
public
void bulidCpu() {
// TODO Auto-generatedmethod stub
computer.setCpu("i3-450");
}
@Override
public
void bulidRam() {
// TODO Auto-generatedmethod stub
computer.setRam("2G1333MHZ");
}
@Override
public
void bulidHarddisk() {
// TODO Auto-generatedmethod stub
computer.setHardDisk("250G");
}
@Override
public
void bulidMonitor() {
// TODO Auto-generatedmethod stub
computer.setMonitor("12英寸 1280*800");
}
@Override
public
void bulidOs() {
// TODO Auto-generatedmethod stub
computer.setOs("Mac");
}
@Override
public Computer getResule() {
// TODO Auto-generatedmethod stub
return
computer;
}
@Override
public
void bulidGraphicCard() {
// TODO Auto-generatedmethod stub
}
}
public
class ComputerDirector {
Computerbulider bulider;
//构造T410型计算机
public T410 constructT410(){
bulider=new T410Bulider();
bulider.bulidCpu();
bulider.bulidRam();
bulider.bulidHarddisk();
bulider.bulidGraphicCard();
bulider.bulidMonitor();
bulider.bulidOs();
return (T410)bulider.getResule();
}
//构造X201型计算机
public
X201constructX201(){
bulider=new X201Bulider();
bulider.bulidCpu();
bulider.bulidRam();
bulider.bulidHarddisk();
bulider.bulidGraphicCard();
bulider.bulidMonitor();
bulider.bulidOs();
return (X201)bulider.getResule();
}
}
public
class ComputerTest {
/**
* @param args
*/
public
static void main(String[] args) {
// TODO Auto-generatedmethod stub
ComputerDirector director=new ComputerDirector();
Computer t410=director.constructT410();
System.out.println(t410);
System.out.println("------------------------------------------");
Computer x201=director.constructX201();
System.out.println(x201);
}
}
Separate the construction of a complexobject from its representation so that the same construction process can createdifferent representations.
讲一个复杂对象的构建于它的表示分离,使得同样的构建过程可以创建不同的表示。
建造者中设计四个角色
抽象建造者(Builder)角色:该角色用于规范产品各个组成部分,并进行抽象,一般独立于应用程序的逻辑。
具体建造者(Concrete Bulider)角色;该角色实现抽象建造者中定义了所有方法,并且返回一个组建好的实例。
产品(Product)角色;该角色是建造中的复杂对象,一个系统中会有多余一个的产品类,这些产品类并不一定有共同的接口,完全可以是不相关连的。
导演者(Director)角色:该角色安排已有模块的顺序,然后告诉Bulider开始建造.
建造者模式的应用
1建造者模式的优点
封装性,使用建造者模式可以使客户端不必知道产品内部组成的细节
建造者独立,容易扩展
便于控制细节风险,由于具体的建造者是独立的,因此可以对建造过程逐步细化,而不对其他的模块产生任何影响。
2建造者模式的使用场景
相同的方法,不同的执行顺序,产生不同的结果时,可以采用建造者模式
多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不相同时,则可以使用该模式。
产品类非常复杂,或者产品类中的方法调用顺序不同,产生了不同的效能,这个时候使用建造者模式。
在对象创建过程中会使用到系统的一些其他对象,这些对象在产品对象的创建过程中不宜得到时,也可以采用建造者模式封装该对象的创建过程。该种场景智能是一个补偿方法,因为一个对象不容易获得,而在设计阶段没有发现,要通过创建者模式柔化创建过程,本省已经违反了设计的最初目标。
创建者模式关注的是零件类型和装配工艺顺序,这与工厂方法模式最大的不同之处,虽为创建者模式,但是重点不同。
public
abstract class Computer {
private String
type;
private String
cpu;
private String
ram;
private String
hardDisk;
private String
monitor;
private String
os;
public String getType() {
return
type;
}
public
void setType(String type) {
this.type = type;
}
public String getCpu() {
return
cpu;
}
public
void setCpu(String cpu) {
this.cpu = cpu;
}
public String getRam() {
return
ram;
}
public
void setRam(String ram) {
this.ram = ram;
}
public String getHardDisk() {
return
hardDisk;
}
public
void setHardDisk(String hardDisk) {
this.hardDisk = hardDisk;
}
public String getMonitor() {
return
monitor;
}
public
void setMonitor(String monitor) {
this.monitor = monitor;
}
public String getOs() {
return
os;
}
public
void setOs(String os) {
this.os = os;
}
}
public
interface Computerbulider {
void bulidCpu();
void bulidRam();
void bulidHarddisk();
void bulidGraphicCard();
void bulidMonitor();
void bulidOs();
Computer getResule();
}
public
class T410 extends Computer {
private String
graphicCard;//显卡
public String getGraphicCard() {
return
graphicCard;
}
public
void setGraphicCard(StringgraphicCard) {
this.graphicCard = graphicCard;
}
public T410(){
this.setType("ThinkpadT410i");
}
public String toString(){
return
"型号: \t"+this.getType()+"\nCPU:\t"+this.getCpu()
+"\n内存:\t"+this.getRam()+"\n硬盘:\t"+this.getHardDisk()
+"\n显卡:\t"+this.getGraphicCard()+"\n显示器\t"
+this
df3a
.getMonitor()+"\n操作系统"+this.getOs();
}
}
public
class X201 extends Computer {
public X201(){
this.setType("ThinkpadT410i");
}
public
StringtoString(){
return
"型号: \t"+this.getType()+"\nCPU:\t"+this.getCpu()
+"\n内存:\t"+this.getRam()+"\n硬盘:\t"+this.getHardDisk()
+"\n显示器\t"
+this.getMonitor()+"\n操作系统"+this.getOs();
}
}
public
class T410Bulider implements Computerbulider {
private T410
computer =new T410();
@Override
public
void bulidCpu() {
// TODO Auto-generatedmethod stub
computer.setCpu("i5-450");
}
@Override
public
void bulidRam() {
// TODO Auto-generatedmethod stub
computer.setRam("4G 1333MHZ");
}
@Override
public
void bulidHarddisk() {
// TODO Auto-generatedmethod stub
computer.setHardDisk("200G");
}
@Override
public
void bulidGraphicCard() {
// TODO Auto-generatedmethod stub
computer.setGraphicCard("Nvidia NVS 3100M");
}
@Override
public
void bulidMonitor() {
// TODO Auto-generatedmethod stub
computer.setMonitor("14英寸1280*800");
}
@Override
public
void bulidOs() {
// TODO Auto-generatedmethod stub
computer.setOs("Win7");
}
@Override
public Computer getResule() {
// TODO Auto-generatedmethod stub
return
computer;
}
}
public
class X201Bulider implements Computerbulider {
private X201
computer =new X201();
@Override
public
void bulidCpu() {
// TODO Auto-generatedmethod stub
computer.setCpu("i3-450");
}
@Override
public
void bulidRam() {
// TODO Auto-generatedmethod stub
computer.setRam("2G1333MHZ");
}
@Override
public
void bulidHarddisk() {
// TODO Auto-generatedmethod stub
computer.setHardDisk("250G");
}
@Override
public
void bulidMonitor() {
// TODO Auto-generatedmethod stub
computer.setMonitor("12英寸 1280*800");
}
@Override
public
void bulidOs() {
// TODO Auto-generatedmethod stub
computer.setOs("Mac");
}
@Override
public Computer getResule() {
// TODO Auto-generatedmethod stub
return
computer;
}
@Override
public
void bulidGraphicCard() {
// TODO Auto-generatedmethod stub
}
}
public
class ComputerDirector {
Computerbulider bulider;
//构造T410型计算机
public T410 constructT410(){
bulider=new T410Bulider();
bulider.bulidCpu();
bulider.bulidRam();
bulider.bulidHarddisk();
bulider.bulidGraphicCard();
bulider.bulidMonitor();
bulider.bulidOs();
return (T410)bulider.getResule();
}
//构造X201型计算机
public
X201constructX201(){
bulider=new X201Bulider();
bulider.bulidCpu();
bulider.bulidRam();
bulider.bulidHarddisk();
bulider.bulidGraphicCard();
bulider.bulidMonitor();
bulider.bulidOs();
return (X201)bulider.getResule();
}
}
public
class ComputerTest {
/**
* @param args
*/
public
static void main(String[] args) {
// TODO Auto-generatedmethod stub
ComputerDirector director=new ComputerDirector();
Computer t410=director.constructT410();
System.out.println(t410);
System.out.println("------------------------------------------");
Computer x201=director.constructX201();
System.out.println(x201);
}
}
相关文章推荐
- 设计模式学习笔记(六)建造者模式
- 设计模式学习笔记八:建造者模式(Builder Pattern)
- 设计模式学习笔记(五):建造者模式【Builder Pattern】(三)问题引申
- 设计模式学习笔记——建造者(Builder)模式
- 学习笔记——JAVA设计模式<3>建造者模式
- 设计模式学习笔记——建造者模式
- 设计模式学习笔记之建造者模式
- Java学习笔记---设计模式之建造者模式(一)
- 设计模式学习笔记之建造者模式
- 九、建造者模式——设计模式学习笔记
- C#设计模式学习笔记-建造者模式
- 设计模式学习笔记(五):建造者模式【Builder Pattern】(一)问题提出
- .Net设计模式学习笔记(四):建造者模式(Builder Pattern)
- 设计模式学习笔记(五):建造者模式【Builder Pattern】(二)问题改进
- 设计模式学习笔记--建造者模式
- Java-马士兵设计模式学习笔记-建造者模式
- 设计模式学习笔记——建造者模式
- java/android 设计模式学习笔记(10)---建造者模式
- 设计模式学习笔记——建造者模式
- 设计模式 学习笔记(5)迪米特法则、外观模式、建造者模式