您的位置:首页 > 其它

简说生成器模式

2018-01-22 14:34 99 查看

设计模式之生成器模式

定义

生成器模式(又名建造者模式)是设计模式的一种,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 —— [ 百度百科 ]

解释说明

在生成器模式中,对复杂对象的创建,我们抽象化出统一的创建流程,在各个创建流程中,我们可以按需实现不同的业务逻辑。在对外显示中,我们使用统一的外部指导者,通过抽象化出的统一创建流程,创建复杂对象。

代码块

public class Test {
//生成器接口-构建统一的创建流程
interface Builder{
public abstract void hair();
public abstract void clothes();
public abstract void shose();
public abstract Man build();
}
//具体的生成器
class ConcreteBuilder implements Builder{
private Man man = new Man();
@Override
public Man build(){
hair();
clothes();
shose();
return this.man;
}
@Override
public void hair() {
man.hair = "卷发";
}
@Override
public void clothes() {
man.clothes = "皮夹克";
}
@Override
public void shose() {
man.shose = "帆布鞋";
}
}
//指导者-调用生成器生成对象
class Director{
public Director(ConcreteBuilder concreteBuilder){
this.concreteBuilder = concreteBuilder;
}
public Man returnMan(){
return this.concreteBuilder.build();
}
private ConcreteBuilder concreteBuilder;

}
//产品类-被生成对象
class Man{
public String hair;
public String clothes;
public String shose;
public void say(){
System.out.println("我的外貌特征:" + hair + "," + clothes + "," + shose);
}
}
//测试
public static void main(String[] args) {
//实例化生成器
ConcreteBuilder concreteBuilder = new Test().new ConcreteBuilder();
//实例化指导者
Director director = new Test().new Director(concreteBuilder);
//实例化现有类
Man man = director.returnMan();
man.say();
}
}


代码解读

以上就是完整的生成器模式代码实例。在以上代码中,我们先抽象出一个生成器接口,此接口用于约束我们的产品(Man)类的创建流程。随后创建的具体的生成器类(ConcreteBuilder),其中我们具体实现了一个复杂(Man)对象的生成过程。比如:需要什么样的发型,需要什么样的衣服,需要什么样的鞋子。

当然,上述的生成器类(ConcreteBuilder)只是一个简单示范,在生成器模式中,该类可以有很多个,不同的生成器类具有不同的业务逻辑,从而保证了生成的产品类(Man)具有不一样的属性或者行为。

最后,我们创建一个指导类,用于调用具体的生成器类,从而标准化产品类创建的外部访问接口,同时内部可以有更加复杂的逻辑,以便满足我们调用不同的生成器类创建不同的产品。

总结

优点

使用生成器模式可以使客户端不必知道产品内部组成的细节。

具体的建造者类之间是相互独立的,对系统的扩展非常有利。

由于具体的建造者是独立的,因此可以对建造过程逐步细化,而不对其他的模块产生任何影响。

试用场景

需要生成一个产品对象有复杂的内部结构。每一个内部成分本身可以是对象,也可以使一个对象的一个组成部分。

需要生成的产品对象的属性相互依赖。建造模式可以强制实行一种分步骤进行的建造过程。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息