Design Pattern_Java:Builder Pattern
2015-08-24 20:28
435 查看
Design Pattern:Builder Pattern
建造者模式 Builder Pattern
Separate the construction of a complex object from its representation so that the same construction process can create different representations.
将一个复杂对象的构建与它的表示分离,是的同样的构建过程可以创建不同的表示。
抽象建造者角色(Builder):该角色用于规范产品的各个组成部分,并进行抽象,一般独立于应用程序的逻辑。
public abstract class Builder { //设置产品的不同部分,以获得不同的产品 public abstract void setPart1(); public abstract void setPart2(); public abstract void setPart3(); //建造产品 public abstract Product builderProduct(); }
具体建造者角色(Concrete Builder):该角色实现抽象建造者中定义的所有方法,并且返回一个组建好的产品实例。
public class ConcreteBuilder extends Builder{ private Product product=new Product(); //设置产品零件 @Override public void setPart1() { //为product安装部件1 } @Override public void setPart2() { //为product安装部件2 } @Override public void setPart3() { //为product安装部件2 } //建造一个产品 @Override public Product builderProduct() { return product; } }
产品角色(Product):该角色是建造中的复杂对象,一个系统中会有多于一个的产品类,这些产品类并一定有共同的接口,完全可以是不想关联的。
public class Product{ //产品类的业务处理方法 }
导演者角色(Director):该角色负责安排已有模块的顺序,然后告诉Builder开始建造。
public class Director{ private Builder builder=new ConcreteBuilder(); //构造产品,负责调用各个零件建造方法 public Product build(){ builder.setPart1(); builder.setPart2(); builder.setPart3(); return builder.builderProduct(); } }
建造者模式的实例
Computer.java
package com.DesignPattern.Creational.Builder; 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; } }
T410.java
package com.DesignPattern.Creational.Builder; public class T410 extends Computer { private String graphicCard; public T410() { this.setType("ThinkPad T410i"); } public String getGraphicCard() { return graphicCard; } public void setGraphicCard(String graphicCard) { this.graphicCard = graphicCard; } @Override public String toString() { return "T410 [graphicCard=" + graphicCard + ", getType()=" + getType() + ", getCpu()=" + getCpu() + ", getRam()=" + getRam() + ", getHardDisk()=" + getHardDisk() + ", getMonitor()=" + getMonitor() + ", getOs()=" + getOs() + "]"; } }
X201.java
package com.DesignPattern.Creational.Builder; public class X201 extends Computer { public X201() { this.setType("ThinkPad X201i"); } @Override public String toString() { return "X201 [getType()=" + getType() + ", getCpu()=" + getCpu() + ", getRam()=" + getRam() + ", getHardDisk()=" + getHardDisk() + ", getMonitor()=" + getMonitor() + ", getOs()=" + getOs() + "]"; } }
ComputerBuilder.java
package com.DesignPattern.Creational.Builder; public interface ComputerBuilder { void buildCpu(); void buildRam(); void buildHardDisk(); void buildGraphicCard(); void buildMonitor(); void buildOS(); Computer getResult(); }
T410Builder.java
package com.DesignPattern.Creational.Builder; public class T410Builder implements ComputerBuilder { private T410 computer = new T410(); @Override public void buildCpu() { computer.setCpu("i5-450"); } @Override public void buildRam() { computer.setRam("4GB 1333MHz"); } @Override public void buildHardDisk() { computer.setHardDisk("500G 7200转"); } @Override public void buildGraphicCard() { computer.setGraphicCard("Nvidia NVS 3100M"); } @Override public void buildMonitor() { computer.setMonitor("14英寸 1280*800"); } @Override public void buildOS() { computer.setOs("Windows 7旗舰版"); } @Override public Computer getResult() { return computer; } }
X201Builder.java
package com.DesignPattern.Creational.Builder; public class X201Builder implements ComputerBuilder { private X201 computer = new X201(); @Override public void buildCpu() { computer.setCpu("i3-350"); } @Override public void buildRam() { computer.setRam("2GB 1333MHz"); } @Override public void buildHardDisk() { computer.setHardDisk("250G 5400转"); } @Override public void buildGraphicCard() { // 无显卡 } @Override public void buildMonitor() { computer.setMonitor("12英寸 1280*800"); } @Override public void buildOS() { computer.setOs("Windows 7 Home版"); } @Override public Computer getResult() { return computer; } }
ComputerDirector.java
package com.DesignPattern.Creational.Builder; public class ComputerDirector { ComputerBuilder builder; public T410 constructT410(){ builder=new T410Builder(); builder.buildCpu(); builder.buildRam(); builder.buildHardDisk(); builder.buildGraphicCard(); builder.buildMonitor(); builder.buildOS(); return (T410)builder.getResult(); } public X201 constructX210(){ builder=new X201Builder(); builder.buildCpu(); builder.buildRam(); builder.buildHardDisk(); builder.buildMonitor(); builder.buildOS(); return (X201)builder.getResult(); } }
ComputerTest.java
package com.DesignPattern.Creational.Builder; public class ComputerTest { public static void main(String[] args){ ComputerDirector director=new ComputerDirector(); Computer t410=director.constructT410(); System.out.println(t410); System.out.println("-------------------------------"); Computer x201=director.constructX210(); System.out.println(x201); } }
相关文章推荐
- UIView常用的方法
- Android UI设计:ListView适配器——ArrayAdapter、SimpleAdapter与BaseAdapter
- Go web之旅(Request分析)
- UIKeyboard
- Android UI设计——RadioButton和CheckBox控件
- STL Algorithms 之 unique
- Android UI之QuickContactBasge
- UItableView中的一些方法
- IOS-笔记14(UITextField,UITableView)
- HDU 5400(Arithmetic Sequence-暴力找区间)
- UIScrollView添加控件,控件距离顶部始终有间距的问题
- 5 Techniques To Understand Machine Learning Algorithms Without the Background in Mathematics
- IOS第12天(3,UIViewController的生命周期)
- IOS UITextView自适应高度
- IOS UITextView自适应高度
- IOS第12天(2,UINavigationController导航控制器)
- uuid生成12位随机数 不重复
- UIAlert的使用
- STL学习----入门(1)[queue]
- 野人学Android基础篇之初探UI控件第一课--TextView静态赋值