设计模式学习笔记(5)建造者模式

建造者模式

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.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);

    }

 

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值