zoukankan      html  css  js  c++  java
  • 设计模式Day02

    1、生成器模式
     生成器模式也称为建造者模式。生成器模式的意图在于将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。
     生成器模式的编程步骤:
     (1)定义一个产品类;
      由于不在该类完成Product类对象的创建,所以无需显示定义构造方法。
     (2)定义n个生成器Build类;
      生成器是用来生成Product对象的,因此一般来说,Product是生成器类的一个成员变量;每创建一个Product对象,本质上先创建Unit1,Unit2,...UnitN,再把它们组合成所需的Product对象,因此需要n个createUnit()方法及一个组合方法composite();由于createUnit()及composite()是共性,因此可定义共同的生成器类接口,n个生成器类均从此接口派生即可。
     (3)定义一个统一调度类,也叫指挥者类。是对生成器接口IBuild的封装。
     生成器设计模式涉及4个关键角色:产品(Product)、抽象生成器(IBuild)、具体生成器(Builder)、指挥者(Director)。在生成器模式中,抽象生成器和具体生成器是必需的,指挥者类需要在实际问题中认真考虑,加以取舍。

    [代码]java代码:

    1
    2
    3
    public class Unit1 {}
    public class Unit2 {}
    public class Unit3 {}

    [代码]java代码:

    1
    2
    3
    4
    5
    6
    //定义一个产品类
    public class Product {
        Unit1 u1;
        Unit2 u2;
        Unit3 u3;
    }

    [代码]java代码:

    1
    2
    3
    4
    5
    6
    7
    //定义生成器类接口IBuild
    public interface IBuild {
        public void createUnit1();
        public void createUnit2();
        public void createUnit3();
        public Product composite();//返回值是Product对象
    }

    [代码]java代码:

    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    public class BuildProduct implements IBuild {//生成第一种Product
        Product p=new Product();//Product是成员变量
     
        @Override
        public void createUnit1() {
            //p.u1=...          //创建Unit1
        }
     
        @Override
        public void createUnit2() {
            //p.u2=...          //创建Unit2
        }
     
        @Override
        public void createUnit3() {
            //p.u3=...          //创建Unit3
        }
     
        @Override
        public Product composite() {
            //...               //关联Unit1,Unit2,Unit3
            return p;           //返回Product对象p
        }
     
    }

    [代码]java代码:

    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    12
    13
    14
    15
    16
    17
    public class Director {
        private IBuild build;
        public Director(IBuild build){
            this.build=build;
        }
        public Product build(){
            build.createUnit1();
            build.createUnit2();
            build.createUnit3();
            return build.composite();
        }
        public static void main(String[] args) {
            IBuild build=new BuildProduct();
            Director direct=new Director(build);
            Product p=direct.build();
        }
    }


    2、利用Product派生类方法,也可以实现类似的生成功能。

    [代码]java代码:

    1
    2
    3
    public class Unit1 {}
    public class Unit2 {}
    public class Unit3 {}

    [代码]java代码:

    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    //定义抽象生成器
    public abstract class Product {
        Unit1 u1;
        Unit2 u2;
        Unit3 u3;
        abstract void createUnit1();    //表明子类要创建Unit1
        abstract void createUnit2();    //表明子类要创建Unit2
        abstract void createUnit3();    //表明子类要创建Unit3
        abstract void composite();      //表明子类要组合Unit1、Unit2、Unit3
    }

    [代码]java代码:

    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    //定义具体生成器
    public class BuildProduct extends Product{
     
        @Override
        void createUnit1() {
             
        }
     
        @Override
        void createUnit2() {
             
        }
     
        @Override
        void createUnit3() {
             
        }
     
        @Override
        void composite() {
             
        }
     
    }

    [代码]java代码:

    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    12
    13
    //定义指挥者类
    public class Director {
        Product p;
        public Director(Product p){
            this.p=p;
        }
        void build(){
            p.createUnit1();
            p.createUnit2();
            p.createUnit3();
            p.composite();
        }
    }
  • 相关阅读:
    WCF 第十三章 可编程站点 为站点创建操作
    WCF 第十三章 可编程站点 所有都与URI相关
    WCF 第十二章 对等网 使用自定义绑定实现消息定向
    WCF 第十三章 可编程站点 使用WebOperationContext
    Using App.Config for user defined runtime parameters
    WCF 第十三章 可编程站点
    WCF 第十三章 可编程站点 使用AJAX和JSON进行网页编程
    WCF 第十二章 总结
    WCF 第十三章 可编程站点 使用WebGet和WebInvoke
    WCF 第十三章 可编程站点 URI和UriTemplates
  • 原文地址:https://www.cnblogs.com/android-blogs/p/5631911.html
Copyright © 2011-2022 走看看