- 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://www.kyjszj.com/wdzl/12.html
作者授权:除特别说明外,本文由?开源技术之家?原创编译并授权?开源技术之家?刊载发布。
版权声明:本文不使用任何协议授权,您可以任何形式自由转载或使用。

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

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

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

快捷回复:

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

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