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

生成器模式

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

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

 

你可能感兴趣的:(设计模式)