博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Build(生成器)设计模式之析
阅读量:6195 次
发布时间:2019-06-21

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

hot3.png

Build设计模式 是一种构建型设计模式,它可以将复杂对象的建造过程抽象出来,使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象。

适用性:

     当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时;

   当构造过程必须允许被构造的对象有不同的表示时。

Builder 

     为创建一个Product对象的各个部件指定抽象接口

ConcreteBuilder 

     实现Builder接口以构造和装配该产品的各个部件。

     定义并明确它所创建的表示。

     提高一个检索产品的接口。

Director

     构造一个使用Builder接口的对象

Product

     表示被构造的复杂度,ConcreateBuilder创建该产品的内部表示并定义它的装配过程。

     包含定义组成部件的类,包括将这些部件装配成最终产品的接口。

/** "Product" */ class Pizza {   private String dough = "";   private String sauce = "";   private String topping = "";    public void setDough (String dough)     { this.dough = dough; }   public void setSauce (String sauce)     { this.sauce = sauce; }   public void setTopping (String topping) { this.topping = topping; } }   ''/** "Abstract Builder" */'' abstract class PizzaBuilder {   protected Pizza pizza;    public Pizza getPizza() { return pizza; }   public void createNewPizzaProduct() { pizza = new Pizza(); }    public abstract void buildDough();   public abstract void buildSauce();   public abstract void buildTopping(); }  /** "ConcreteBuilder" */ class HawaiianPizzaBuilder extends PizzaBuilder {   public void buildDough()   { pizza.setDough("cross"); }   public void buildSauce()   { pizza.setSauce("mild"); }   public void buildTopping() { pizza.setTopping("ham+pineapple"); } }  /** "ConcreteBuilder" */ class SpicyPizzaBuilder extends PizzaBuilder {   public void buildDough()   { pizza.setDough("pan baked"); }   public void buildSauce()   { pizza.setSauce("hot"); }   public void buildTopping() { pizza.setTopping("pepperoni+salami"); } }   ''/** "Director" */'' class Waiter {   private PizzaBuilder pizzaBuilder;    public void setPizzaBuilder (PizzaBuilder pb) { pizzaBuilder = pb; }   public Pizza getPizza() { return pizzaBuilder.getPizza(); }    public void constructPizza() {     pizzaBuilder.createNewPizzaProduct();     pizzaBuilder.buildDough();     pizzaBuilder.buildSauce();     pizzaBuilder.buildTopping();   } }  /** A customer ordering a pizza. */ class BuilderExample {   public static void main(String[] args) {     Waiter waiter = new Waiter();     PizzaBuilder hawaiian_pizzabuilder = new HawaiianPizzaBuilder();     PizzaBuilder spicy_pizzabuilder = new SpicyPizzaBuilder();      waiter.setPizzaBuilder ( hawaiian_pizzabuilder );     waiter.constructPizza();      Pizza pizza = waiter.getPizza();   } }

转载于:https://my.oschina.net/JeremyOuyang/blog/177497

你可能感兴趣的文章
MySQL 监控
查看>>
url下载网页的三种方法
查看>>
jdk8中java.util.concurrent包分析
查看>>
hasSet,TreeSet,ArrayList,LinkedList,Vector,HashMap,HashTable,TreeMap利用Iterator进行输出
查看>>
#在lua中的运用
查看>>
CentOS下配置java环境变量classpath
查看>>
请注意,再次记住, centos7,fedora 24中 没有iptables服务, 而使用的firewalld, 也可以安装 iptables-services程序来实现...
查看>>
Atitit 索引技术--位图索引
查看>>
(转)Image Segmentation with Tensorflow using CNNs and Conditional Random Fields
查看>>
PHP存储blob示例(转)
查看>>
js获取系统的根路径实现介绍
查看>>
如何动静分离?
查看>>
linux信任公钥的配置
查看>>
【转载】Restful 简介
查看>>
spring结合mybatis实现数据库读写分离
查看>>
JQuery选择所有标题的元素
查看>>
RestTemplate发送请求并携带header信息
查看>>
Spring JavaConfig @Import实例
查看>>
VS2012发布网站详细步骤问题
查看>>
PowerDesigner
查看>>