设计模式(六)建造者(创建型)

简介:

概念                                                                                         

将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。

类图                                                                                          

1

代码                                                                                          

复制代码
public abstract class Computer {
    private String type;
    private String cpu;
    private String ram;
    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 getOs() {
        return os;
    }
    public void setOs(String os) {
        this.os = os;
    }
    
}
复制代码

创建两种型号的计算机:

复制代码
public class T410 extends Computer {
    private String hardDisk;

    public T410() {
        this.setType("ThinkPad T410i");
    }

    public String getHardDisk() {
        return hardDisk;
    }

    public void setHardDisk(String hardDisk) {
        this.hardDisk = hardDisk;
    }

    @Override
    public String toString() {
        return "T410 [hardDisk=" + hardDisk + ", getType()=" + getType()
                + ", getCpu()=" + getCpu() + ", getRam()=" + getRam()
                + ", getOs()=" + getOs() + ", getClass()=" + getClass()
                + ", hashCode()=" + hashCode() + "]";
    }
}
复制代码
复制代码
public class X201 extends Computer {

    public X201() {
        this.setType("Thinkpad X201i");
    }

    @Override
    public String toString() {
        return "X201 [getType()=" + getType() + ", getCpu()=" + getCpu()
                + ", getRam()=" + getRam() + ", getOs()=" + getOs()
                + ", getClass()=" + getClass() + ", hashCode()=" + hashCode()
                + "]";
    }
}
复制代码

在计算机产品类的基础上增加一个ComputerBuilder接口,以及两个的实现类,以便对计算机进行生产:

复制代码
public interface ComputerBuilder {
    void buildCpu();
    void buildRam();
    void buildHardDisk();
    void BuildOs();
    
    Computer getResult();
}
复制代码
复制代码
public class T410Builder implements ComputerBuilder {

    private T410 computer = new T410();

    @Override
    public void buildCpu() {
        computer.setCpu("i5");

    }

    @Override
    public void buildRam() {
        computer.setRam("4G");

    }

    @Override
    public void buildHardDisk() {
        computer.setHardDisk("500G");

    }

    @Override
    public void BuildOs() {
        computer.setOs("Win7");

    }

    @Override
    public Computer getResult() {
        return computer;
    }

}
复制代码
复制代码
public class X201Builder implements ComputerBuilder {

    private X201 computer = new X201();
    
    @Override
    public void buildCpu() {
        computer.setCpu("i7");

    }

    @Override
    public void buildRam() {
        computer.setRam("8G");

    }

    @Override
    public void buildHardDisk() {
        //没有HaedDisk

    }

    @Override
    public void BuildOs() {
        computer.setOs("Win8");

    }

    @Override
    public Computer getResult() {
        return computer;
    }

}
复制代码

再鞥家导演者:

复制代码
public class ComputerDirector {
    ComputerBuilder builder;
    public T410 constructT410()
    {
        builder = new T410Builder();
        builder.buildCpu();
        builder.buildHardDisk();
        builder.BuildOs();
        builder.buildRam();
        return (T410) builder.getResult();
    }
    
    public X201 constructX201()
    {
        builder = new X201Builder();
        builder.buildCpu();
        builder.buildHardDisk();
        builder.BuildOs();
        builder.buildRam();
        return (X201) builder.getResult();
    }
}
复制代码

测试:

复制代码
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.constructX201();
        System.out.println(x201);
    }

}
复制代码

与抽象工厂的区别                                                                        

在建造者模式里,有个指导者,由指导者来管理建造者,用户是与指导者联系的,指导者联系建造者最后得到产品。即建造模式可以强制实行一种分步骤进行的建造过程。

建造模式是将复杂的内部创建封装在内部,对于外部调用的人来说,只需要传入建造者和建造工具,对于内部是如何建造成成品的,调用者无需关心。




本文转自我爱物联网博客园博客,原文链接:http://www.cnblogs.com/yydcdut/p/3856359.html,如需转载请自行联系原作者

相关文章
|
6月前
|
设计模式 Java 数据库连接
解锁设计模式的神秘面纱:编写无懈可击的代码之建造者设计模式
解锁设计模式的神秘面纱:编写无懈可击的代码之建造者设计模式
31 0
|
8月前
|
设计模式
设计模式-创建型模式:建造者
设计模式-创建型模式:建造者
|
设计模式 Java C++
设计模式-建造者设计模式
建造者模式(Builder Pattern),又叫做生成器模式,是一种对象构建模式。它可以将复杂对象的建造过程抽象出来,使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象。 建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容可构建它,用户不需要知道内部的具体构建细节。
71 0
|
设计模式 算法 Java
【设计模式 】| 建造者源码学习与实践
为什么要用建造者模式?在我们看来他和工厂模式的目的是一样的,就是为了获取对象。
|
设计模式
设计模式之建造者
设计模式之建造者
93 0
设计模式之建造者
|
设计模式
设计模式是什么鬼(建造者)
设计模式是什么鬼(建造者)
设计模式是什么鬼(建造者)
|
设计模式 缓存 Dart
dart设计模式之建造者和原型模式
这是我参与8月更文挑战的第 13 天,活动详情查看:8月更文挑战。为应掘金的八月更文挑战, 建造者模式 模式分析 建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 一个 Builder 类会一步一步构造最终的对象。该 Builder 类是独立于其他对象的。 模式难点 如何抽象出不同特性需要很强的抽象思维
239 0
|
算法 设计模式
设计模式--生成器(建造者)
生成器模式(Builder) 生成器模式最初的定义出现于《设计模式》(Addison-Wesley,1994) 生成器模式:将一个复杂对象的构建与它的表现分离,使得同样的构建过程可以创建不同的表现。
769 0
|
人工智能 Java
设计模式 之 建造者
  下载 23种设计模式源码 :http://download.csdn.net/download/knight_black_bob/8936043   ///////////////////////////////////////////////////////////////...
912 0
设计模式--建造者设计模式
BUILDER?MM最爱听的就是“我爱你”这句话了,见到不同地方的MM,要能够用她们的方言跟她说这句话哦,我有一个多种语言翻译机,上面每种语言都有一个按键,见到MM我只要按对应的键,它就能够用相应的语言说出“我爱你”这句话了,国外的MM也可以轻松搞掂,这就是我的“我爱你”builder。
783 0