设计模式开始--生成器模式

生成器模式

设计模式的原则:尽量暴漏在主程序里面的代码扩展性强一些,多用接口和虚拟类,少用实现类,这样再改程序的时候就方便的多了。

1、作用:一个Product类的产生需要多个其他的类Unit顺序生成之后组合而成,而且这些Unit的产生方法是不固定的。

举例而言一个对象会有一些重要的性质,在它们没有恰当的值之前,对象不能作为一个完整的产品使用。比如,一个电子邮件有发件人地址、收件人地址、主题、内容、附录等部分,而在最起码的收件人地址未被赋值之前,这个电子邮件不能发出。有些情况下,一个对象的一些性质必须按照某个顺序赋值才有意义。在某个性质没有赋值之前,另一个性质则无法赋值。这些情况使得性质本身的建造涉及到复杂的商业逻辑。这时候,此对象相当于一个有待建造的产品,而对象的这些性质相当于产品的零件,建造产品的过程就是组合零件的过程。由于组合零件的过程很复杂,因此,这些"零件"的组合过程往往被"外部化"到一个称作建造者的对象里,建造者返还给客户端的是一个全部零件都建造完毕的产品对象。(摘抄自http://www.cnblogs.com/lds85930/articles/643143.html)

2、类图:

3、实现

(1)Unit定义单元

public class Unit {
    String type = null;
    public Unit(String type)
    {
        this.type = type;
    }
    public String getInfo()
    {
        return type;
    }
}
View Code

(2)IBuider 定义组成单元的流程 并且返回Product

public interface IBuilder {
    public void createOne();
    public void createTwo();
    public Product getProduct();
}
View Code

(3)IBuilderOne 是IBuilder的实现类,定义了单元组成Product的一种方式

public class IBuilderOne implements IBuilder {
    Product p = new Product();
    @Override
    public void createOne() {
        p.one = new Unit("In first one");
    }
    @Override
    public void createTwo() {
        p.two = new Unit("In first two");
    }
    @Override
    public Product getProduct() {
        return p;
    }
}
View Code

(4)IBuilderTwo 是IBuilder的实现类,定义了单元组成Product的另外一种方式

public class IBuilderTwo implements IBuilder {
    Product p = new Product();
    @Override
    public void createOne() {
        p.one = new Unit("In Second one");
    }
    @Override
    public void createTwo() {
        p.two = new Unit("In Second two");
    }
    @Override
    public Product getProduct() {
        return p;
    }
}
View Code

(5)Director 定义了用哪一种IBuilder 并且返回Product

public class Director {
    IBuilder builder;
    public Director(IBuilder builder)
    {
        this.builder = builder;
    }
    public Product getProduct()
    {
        builder.createOne();
        builder.createTwo();
        return builder.getProduct();
    }
    public static void main(String[] args)
    {
        IBuilder builder = new IBuilderTwo();
        Director director = new Director(builder);
        Product product = director.getProduct();
        product.showInfo();
    }
}
View Code

(6)Product类,定义了Product需要哪些原件进行组合

public class Product {
    Unit one;
    Unit two;
    public void showInfo()
    {
        System.out.println(one.getInfo()+"-->"+two.getInfo());
    }
}
View Code
原文地址:https://www.cnblogs.com/sunshisonghit/p/4373041.html