设计模式-创建型软件设计模式(二)

生成器模式

简介

生成器模式与工厂方法模式二者有相似之处,二者都属于创建型设计模式,并且都将对象创建的任务交给一个单独的类去完成。
生成器模式将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。生成器模式按照一个指定的过程逐步创建一个复杂的对象,他允许用户只通过指定复杂对象的类型和内容就可以构架它们,而不必知道内部的具体构建细节。生成器的主要思想是抽象出构建对象的步骤,使得这些步骤的不同实现可以创建对象的不同表示。通常,生成器模式被用来创建符合组合模式的产品对象。

特点

(1)生成器让用户可以变化它建造产品的内部表示方式,它也隐藏了产品怎样装配的细节。
(2)每个具体的生成器都独立于程序的其他生成器,因此改善了程序的模块化,而且使添加其他生成器变得相对简单。
(3)由于每个生成器根据数据逐步的构架最终产品,用户对生成器构建的最终产品有更多的控制。
(4)生成器模式与抽象工厂模式有相似之处,都返回由其他一些对象组成的类的对象。主要区别是:抽象工厂模式返回一个类族,而生成器模式逐步按照次序构建一个负载的对象,最后该对象被返回。

示例

具体的产品类
class House
{
    private String type = null; 
    private String area;
    private String bedroom;
    private String bathroom;
    private String garage;
    int house_low_price = 5000;
    int house_middle_price = 10000;
    int house_high_price = 20000;
    ....
    public int getHousePrice(){...}
}

生成器
abstract class HouseBuilder
{
    protected House house;
    protected String area;
    protected String bedroom;
    protected String bathroom;
    protected String garage;

    public void createNewHouse(){house = new House();}
    ....
    public abstract buildArea();
    public abstract buildBedroom();
    public abstract buildBathroom();
    public abstract buildGarage();
}

class lowHouseBuilder extends HouseBuilder
{
    public void buildArea(house.setArea(area));
    public void buildBedroom(){...};
    public void buildBathroom(){..};
    public void buildGarage(){...};
}

class middleHouseBuilder extends HouseBuilder
{
    public void buildArea(house.setArea(area));
    public void buildBedroom(){...};
    public void buildBathroom(){..};
    public void buildGarage(){...};
}

class highHouseBuilder extends HouseBuilder
{
    public void buildArea(...);
    public void buildBedroom(){...};
    public void buildBathroom(){..};
    public void buildGarage(){...};
}

director类,负责指导builder
public class Director
{
    private HouseBuilder hs;
    public void constructHouse()
    {
        hs.createNewHouse();
        hs.buildArea(...);
        hs.buildBedroom(){...};
        hs.buildBathroom(){..};
        hs.buildGarage(){...};
    }
    public void SetBuilder(HouseBuilder value){hs = value;}
    HouseBuilder GetBuilder(){...}
    House getHouse(){...}
}
---------以上是生成者模式--------
工厂类
class BuildFactory
{
    public HouseBuilder getBuilder(String str)
    {
        HouseBuilder builder = null;
        if(str.equals(...)){builder = new lowHouseBuilder ();}
        ...
    }
}

使用:
Director dir = new Director();
dir.setBuilder(builder);
dir.constructHouse();
dir.getHouse();

总结

工厂模式可以看做是生成者模式的一个简化版本。工厂方法模式中,工厂方法负责创建一个类的不同子类对象,用户不需要知道哪个子类被创建了。在生成者模式中,生成器也使用了一个创建者方法创建不同的子类的对象,但是即使使用的是同样的子类,这些子类的对象的组合也可能不同。
通常,在初始设计的时候可以使用工厂模式,而当设计中发现需要更多的灵活性的时候,设计者可以开始考虑使用抽象工厂模式或者生成者模式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一夜了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值