建造者模式(Builder Pattern)
来源:互联网 发布:国外有类似淘宝吗 编辑:程序博客网 时间:2024/05/22 12:09
Separate the construction of a complex object from its representation so
that the same construction process can create different representation.
在这模式中,我们可以把导演者可以看成是一个工程师,把抽象建造者可以看成是一个原
料加工者,而把具体建造者看成是施工队,而把产品可以看成是一个楼房。
抽象建造者(Builder)角色: 该角色用于规范产品的各个组成部分,并进行抽象。一般
独立于应用程序逻辑。
public abstract class Builder
{
public abstract void method1();
public abstract void method2();
public abstract void method3():
}
集体建造者(Concrete Builder)角色:该角色实现抽象建造者中定义的所有方法,并
且返回一个产品实例。
public class ConcreteBuilder
{
public void method1()
{
System.out.println("地基完成");
}
public void method2()
{
System.out.println("大框架完成");
}
public void method3()
{
System.out.println("装潢完成");
}
}
产品角色(Product):该角色是建造者中的复杂对象,一个系统中会有多余一个产品类,
这些产品并不一定有公共的接口,完全可以是不相关联的。
public class Product
{
}
导演者角色(Director):该角色负责已有模块顺序。然后告诉建造者开始建造。
public class Director
{
Builder builder = new ConcreteBuilder();
public Product build()
{
builder.method1();
builder.method2();
builder.method3();
return builder.builderProduct();
}
}
示例:
package com.builderpattern;
public abstract class Computer
{
//定义机型
private String type;
//定义CPU
private String cpu;
//定义内存
private String ram;
//定义硬盘
private String hardDisk;
//定义显示器
private String monitor;
//定义操作系统
private String os;
//get和set 方法
/*
public String getType()
{
return type;
}
public void setType(String type)
{
this.type = type;
}
*/
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;
}
}
package com.builderpattern;
public class T410 extends Computer
{
//定义 显卡
private String graphicsCard;
public T410()
{
this.setType("ThinkPad T410");
}
public String getGraphicsCard()
{
return graphicsCard;
}
public void setGraphicsCard(String graphicsCard)
{
this.graphicsCard = graphicsCard;
}
@Override
public String toString()
{
// TODO Auto-generated method stub
return "型号:\t" +this.getType()+"\nCPU:\t"+this.getCpu
()+"\n内存:\t"+this.getRam()+"\n硬盘\t"+this.getHardDisk()+"\n显卡:
\t"+this.getGraphicsCard()+"\n显示器:\t"+this.getMonitor()+"\n操作系统
\t:"+this.getOs();
}
}
package com.builderpattern;
public class X201 extends Computer
{
public X201()
{
this.setType("ThinkPad X201i");
}
@Override
public String toString()
{
return "型号:\t"+this.getType() +"\nCPU:\t"+this.getCpu
()+"\n内存:\t"+this.getRam()+"\n硬盘:\t"+this.getHardDisk()+"\n显示器:
\t"+this.getMonitor()
+"\n操作系统\t"+this.getOs();
}
}
package com.builderpattern;
public interface ComputerBuilder
{
//建造Cpu
void buildCpu();
//建造Ram
void buildRam();
//建造硬盘
void buildHardDisk();
//建造显示器
void buildMinitor();
//建造显卡
void buildGraphicsCard();
//建造操作系统
void buildOs();
//得到建造好的计算机
Computer getResult();
}
package com.builderpattern;
public class T410Builder implements ComputerBuilder
{
private T410 computer = new T410();
@Override
public void buildCpu()
{
computer.setCpu("i5-450");
}
@Override
public void buildGraphicsCard()
{
computer.setHardDisk("Nvidia NVs 3100M");
}
@Override
public void buildMinitor()
{
computer.setMonitor("14英寸 1800*1200");
}
@Override
public void buildRam()
{
computer.setRam("4GB 1333Mhz");
}
@Override
public void buildOs()
{
computer.setOs("Windows 7 旗舰版");
}
@Override
public void buildHardDisk()
{
computer.setHardDisk("500GB 7200转");
}
@Override
public Computer getResult()
{
return computer;
}
}
package com.builderpattern;
public class X201Builder implements ComputerBuilder
{
private X201 computer = new X201();
public void buildCpu()
{
computer.setCpu("i2 -400");
}
@Override
public void buildGraphicsCard()
{
}
@Override
public void buildHardDisk()
{
computer.setHardDisk("500GB 3600转");
}
@Override
public void buildMinitor()
{
computer.setMonitor("14英寸 1200 * 1000");
}
@Override
public void buildOs()
{
computer.setOs("Windows 家庭版");
}
@Override
public void buildRam()
{
computer.setRam("2GB ");
}
@Override
public X201 getResult()
{
return computer;
}
}
package com.builderpattern;
public class ComputerDirector
{
ComputerBuilder builder;
//构造T410 行计算机
public T410 constructT410()
{
builder = new T410Builder();
builder.buildCpu();
builder.buildGraphicsCard();
builder.buildHardDisk();
builder.buildMinitor();
builder.buildOs();
builder.buildRam();
return (T410)builder.getResult();
}
//构造X201型计算机
public X201 constructX201()
{
builder = new X201Builder();
builder.buildCpu();
builder.buildGraphicsCard();
builder.buildHardDisk();
builder.buildMinitor();
builder.buildOs();
builder.buildRam();
return (X201)builder.getResult();
}
}
package com.builderpattern;
public class ComputerTest
{
public static void main(String[] args)
{
ComputerDirector director = new ComputerDirector();
Computer t410 = director.constructT410();
System.out.println(t410);
Computer x201 = director.constructX201();
System.out.println(x201);
}
}
- 建造者模式(Builder Pattern)
- 3--建造者模式(Builder Pattern)
- 建造者模式(Builder Pattern)
- 建造者模式(Builder Pattern)
- 建造者模式(Builder Pattern)
- 建造者模式(Builder Pattern)
- 建造者模式(Builder Pattern)
- 建造者模式(Builder pattern)
- 建造者模式(Builder Pattern)
- 建造者模式(Builder Pattern)
- 建造者模式(Builder Pattern )
- Builder pattern(java 建造者模式)
- 建造者模式(Builder Pattern)
- 建造者模式(Builder Pattern)
- Builder Pattern(建造者模式)
- 建造者模式(Builder Pattern)
- 建造者模式(Builder Pattern)
- 建造者模式(Builder Pattern)
- OA学习总结
- 微软系列面试题c/c++第一题双向链表
- 第二次C语言上机报告
- Some characters cannot be mapped using "GBK" character encoding.
- 网站视频广告屏蔽专家
- 建造者模式(Builder Pattern)
- Android---把用户带入另外一个应用程序(一)
- 双向冒泡排序
- 3.OGNL表达式原理
- Struts2的常量详解
- C双向链表学习笔记
- python socket 说明
- c++
- Python 学习笔记 -- 变量、元组、列表、字典和集合