博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java设计模式-Builder生成器模式
阅读量:5173 次
发布时间:2019-06-13

本文共 2123 字,大约阅读时间需要 7 分钟。

概念:

  生成器模式也称之为建造者模式。生成器模式的意图在于将一个复杂的构建与其表示相分离,构建与产品分离。

UML:

    Ibuild接口清晰地反映了创建产品Product的流程。

    生成器模式涉及4个关键角色:产品(Product),抽象生成器(IBuilder),具体生成器(Builder),指挥者(Director).

 

代码演示:

(1)定义1个产品类

public class Unit1{...}public class Unit2{...}public class Unit3{...}public class Product{      Unit1 u1;      Unit2 u2;      Unit3 u3;}

  (2)定义n个生成器Builder类

public interface IBuild{      public void createUnit1();      public void createUnit2();      public void createUnit3();      public Product composite();       public Product create();    }public class BuildProduct implements IBuild{      Product p = new Product();      public void createUnit1(){           //p.u1 = ...        }       public Product create(){
return composite(); } ......}public class BuildProduct1 implements IBuild{ Product p = new Product(); public void createUnit1(){ //p.u1 = ... } ......}

  (3)定义一个统一调度类也叫指挥者(Director).是对生成器接口IBuilder的封装。

public class Director{      private IBuild build;      public Director(IBuild build){             this.build = buid;        }     public Product build(){             build.create();      }      public static void main(){            IBuild build = new BuildProduct();            Director direcotr = new Director(build);            Prodcut p = director.build();         }}

 

另一种实现方式:

      利用Product1派生类方法,也可以实现类似的生成器功能。

           

代码演示:

//定义抽象生成器public abstract class Product{         Unit1 u1;         Unit2 u2;         ....         abstract void createUnit1();         abstract void createUnit2();         ...         abstract void composite();}//定义具体生成器public class BuildProduct extends Product{        void createUnit1() { u1=.... }        ....         void composite(){ /*关联 u1, u2, u3*/}}//定义指挥者类public class Director{        Product p;        public Director(Product p)        {                 this.p = p;         }        void build()        {              p.createUnit1();              p.createUnit2();              ....              p.composite();        }}

 

总之,对于生成器模式创建复杂对象而言,主要原则是对象构造过程与表示相分离。

 

 

     

 

 

     

                 

       

 

转载于:https://www.cnblogs.com/zhuyuliang/p/5212746.html

你可能感兴趣的文章
Nginx负载均衡
查看>>
【bzoj3456】城市规划(多项式求逆+dp)
查看>>
#ifdef 支持Mac #ifndef 支持Windows #if defined (Q_OS_WIN) 应该可以再两个系统通用
查看>>
linux源码中的核心数据结构
查看>>
EF执行SQL语句
查看>>
Ogre学习教程:Ogre1.8.1+VS2010环境配置2(转)
查看>>
webpack 样式表抽离成专门的单独文件并且设置版本号
查看>>
个人作业week7——前端开发感想总结
查看>>
VC Dimension -衡量模型与样本的复杂度
查看>>
android 中 ViewPager 的平常用法 ViewPager+ Views
查看>>
POJ 2449 Remmarguts' Date (SPFA + A星算法) - from lanshui_Yang
查看>>
ZOJ 1654 二分匹配基础题
查看>>
js笔记
查看>>
制作具有SSH、MySQL功能的Chroot
查看>>
TWaver html5 + NodeJS + express + websocket.io + redis 快速搭建项目(二)
查看>>
python 初学02 替换文件内容
查看>>
选择语句 if else
查看>>
STL中的set使用方法详细!!!!
查看>>
sealed关键字的作用
查看>>
Android系统Surface机制的SurfaceFlinger服务简要介绍和学习计划
查看>>