zoukankan      html  css  js  c++  java
  • 设计模式开始--生成器模式

    生成器模式

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

    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
  • 相关阅读:
    用汇编的眼光看C++(之算术符重载) 四
    用汇编的眼光看C++(之嵌入汇编) 四
    用汇编的眼光看C++(之const属性) 四
    用汇编的眼光看C++(之虚函数) 四
    用汇编的眼光看C++(之类继承) 四
    用汇编的眼光看C++(之模板类) 四
    用汇编的眼光看C++(之class构造、析构) 四
    用汇编的眼光看C++(之类静态变量、静态函数) 四
    用汇编的眼光看C++(之特殊函数) 四
    多线程基础知识
  • 原文地址:https://www.cnblogs.com/sunshisonghit/p/4373041.html
Copyright © 2011-2022 走看看