设计模式笔记——创建者模式

所谓创建者模式,他的意思就是,将一个复杂对象的创建过程,抽象出共性的创建流程和差异性的具体创建属性,将它们分离出来,我们按照共性的创建流程创建,在差异性的具体创建属性中进行差异的操作,从而创建出具有相同结构或者流程 的不同产品。创建者模式,一般由四部分组成,product产品类,builder抽象创建者类,createbuilder创建者类,director导演类四个角色组成。

具体来说,product类是我们具体最后要组建的实体产品,他的结构比较复杂,是我们创建的最终目的。

builder类,正如他的名字一样,是个抽象类,是创建者,他主要规定了组成产品的各个部分分别是哪些部分,不管具体实现,是规定一个创建的规范。一般这个类可以由两个大的部分组成,一部分管理各个部分的设置,一个部分是返回一个创建成功的产品。

createbuilder类,是builder的具体实现类,他实现了builder的所有抽象函数,提供了给具体的product设定具体的值的接口,同时返回一个product对象。调用这样一个builder可以进行一个product的属性设置,同时得到一个product对象。

director类,是对createbuilder类的进一步封装。diretor类似工厂模式中的工厂,给外部提供各种各样的产品product。directot中直接打交道的对象是createbuilder对象,通过调用createbuilder对象的设置函数和返回函数进行product的设置和product的返回。

下面我们通过一个例子来说明创建者模式。我们都知道一套套装,应该由头饰,衣服,裤子三个部分组成,现在我们使用创建者模式来模拟一下这个实例。

首先我们先将我们需要得到的产品类定义好,这里 我们简单的把他定义为一个实体类(真实场景中可能是由某个抽象类实现了某些接口而来的,这个部分可以再好好设计一下):

class Suit

{

private String header;

private String cloth;

private String pants;

public void setHeader(String h){ header=h;}

public void setCloth(String c){ cloth=h;}
public void setPants(String p){ pants=h;}

pulbic void show()
{

system.out.println(" header:"+header+"\ncloth:"+cloth+"\npants:"+pants);

}

}


我们定义一个接口来充当builder的角色,这个接口中规定了我们创建一套套装的流程。

interface tailor

{

public abstract void setHeader();

public abstract void setCloth();

public abstract void setPants();

public abstract Suit getSuit();

}

接下来我们定义一个createbuilder来具体实现生产的过程。

class SuitBuilder implements tailor
{
private Suit suit=new Suit();




@Override
public Suit getSuit() {
return suit;
}


@Override
public void setHeader(String h) {
suit.setHeader(h);
}


@Override
public void setCloth(String c) {

suit.setCloth(c);
}


@Override
public void setPants(String p) {
suit.setPants(p);
}

}

最后一步,我们创建一个director来获取不同的suit对象。

class SuitDirector
{
private Builder builder=new SuitBuilder();

public Suit getDressSuit()
{
builder.setCloth("dress");
builder.setHeader("green hat");
builder.setPants("dress");;
return builder.getSuit();
}
public Suit getPantsSuit()
{
builder.setCloth("suit");
builder.setHeader("hat");
builder.setPants("jeans");
return builder.getSuit();
}
}

在main函数中,比如我们想得到一个裙子套装,我们就可以如下调用:
public static void main(String arg [])

{

SuitDirector di=new SuitDirector(); 
di.getDressSuit().show();

}

显示结果:

header:green hat
cloth:dress
pants:dress










  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值