- N +

设计模式之创建者模式

设计模式之创建者模式原标题:设计模式之创建者模式

导读:

什么是创建者模式?创建者模式又叫建造者模式,是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。创建者模式隐藏了复杂对象的创建过程,它把复杂对象的创建...

文章目录 [+]

什么是创建者模式?

创建者模式又叫建造者模式,是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。创建者模式隐藏了复杂对象的创建过程,它把复杂对象的创建过程加以抽象,通过子类继承或者重载的方式,动态的创建具有复合属性的对象。

创建者模式意图

一个对象的创建十分复杂,为了区分构建过程和使用过程,因此分开。使用一个Director类进行对象的创建,Builder规定了这个创建过程。

创建者模式一般包含角色

1.建造者角色(Builder)

对复杂对象的创建过程加以抽象,给出一个抽象接口,以规范产品对象的各个组成部分的建造。这个接口规定了要实现复杂对象的哪个部分的创建,但并不涉及具体对象不见的创建。

2.具体创建者角色(ConcreateBuilder)

实现Builder接口,针对不同的业务逻辑,具体化复杂对象的各个部分的创建。在建造过程完成后,提供产品的实例。

3.指导者(Director)

调用具体建造者来创建复杂对象的各个部分,在指导者中不设计具体产品的信息,只负责保证对象各部分完整创建或者按某种顺序创建。

4.产品(Product)

要创建的复杂对象,一般来说包含多个部分。

创建者模式使用场景

1 当创建对象复杂并且与其使用过程独立。

2 构造过程允许构造的对象有不同的表示。

创建者模式代码实例

 产品类: 

//要组装一台电脑(Computer类),我们假设它有三个部件:CPU 、主板以及内存。
//在Computer类中提供三个set方法分别设置这三个属性。
class Computer {

    private String mCpu;

    private String mMainboard;

    private String mRam;

    public void setmCpu(String mCpu) {
        this.mCpu = mCpu;
    }

    public void setmMainboard(String mMainboard) {
        this.mMainboard = mMainboard;
    }

    public void setmRam(String mRam) {
        this.mRam = mRam;
    }

}

建造者角色(Builder):

//下面就是一个抽象的Builder类,里面提供了安装CPU、主板和内存的抽象方法,以及组装成电脑的create方法。
public abstract class Builder {

    public abstract void buildCpu(String cpu);

    public abstract void buildMainboard(String mainboard);

    public abstract void buildRam(String ram);

    public abstract Computer create();

}

具体创建者角色(ConcreateBuilder):

/下面是一个继承Builder的子类,里面不仅新建了Computer的实例,还提供了安装CPU、主板和内存的具体实现方法,并且在组装成电脑的create方法中将该Computer对象实例返回。
class MyComputerBuilder extends Builder{

    
    Computer computer=new Computer();
    
    
    
    @Override
    public void buildCpu(String cpu) {
        // TODO Auto-generated method stub
        computer.setmCpu(cpu);
    }

    @Override
    public void buildMainboard(String mainboard) {
        // TODO Auto-generated method stub
        computer.setmMainboard(mainboard);
    }

    @Override
    public void buildRam(String ram) {
        // TODO Auto-generated method stub
        computer.setmRam(ram);
    }

    @Override
    public Computer create() {
        // TODO Auto-generated method stub
        return computer;
    }
    
}

指导者(Director):

class Direcror {  
    Builder mBuild=null;  
    public Direcror(Builder build){  
        this.mBuild=build;  
    }  
    public Computer CreateComputer(String cpu,String mainboard,String ram){  
        //规范建造流程,这个顺序是由它定的  
       this.mBuild.buildMainboard(mainboard);  
       this.mBuild.buildCpu(cpu);  
       this.mBuild.buildRam(ram);  
       return mBuild.create();  
    }  
}

使用:

    public static void main(String[] args) {
        
        Builder builder=new MyComputerBuilder();
        
        Direcror dir=new Direcror(builder);
        
        dir.CreateComputer("8核心", "最好的主板", "16G");
        
    }

建造者经典调用:

     //建造者模式精简版
     //在现实开发中,往往省去Director的角色,而直接使用一个Buider实例来进行对象的组装。
    public static void main(String[] args) {
        
        Builder builder=new MyComputerBuilder();
        
        builder.buildCpu("8核心");
        
        builder.buildMainboard("最好的主板");
        
        builder.buildRam("16G");
        
        builder.create();
    }

创建者模式优缺点

建造者模式的优点:

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

2)建造者类逻辑独立,易拓展

 

建造者模式的缺点:

很明显产生了多余的Build对象以及Dirextor对象,消耗了内存。


本文标题:设计模式之创建者模式
本文链接:http://kyjszj.com/wdzl/12.html
作者授权:除特别说明外,本文由 开源技术之家 原创编译并授权 开源技术之家 刊载发布。
版权声明:本文不使用任何协议授权,您可以任何形式自由转载或使用。

有好的文章希望我们帮助分享和推广,猛戳这里我要投稿

返回列表
上一篇:
下一篇:

发表评论中国互联网举报中心

快捷回复:

    评论列表 (暂无评论,共857人参与)参与讨论

    还没有评论,来说两句吧...