设计模式(13)生成器模式(讲解+应用)

java 4 2016-02-29 13:03
女装

目录

  1. 生成器模式+为什么使用生成器模式

  2. 应用实例

生成器模式

生成器模式:(英:Builder Pattern)是一种设计模式,又名:建造模式,是一种对象构建模式。它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象。

构建过程,也就是我们在一个类中的那些set方法,通常我们会通过set方法来对类中的属性进行一系列的设置,来获取这些属性,我们通常会通过get方法来获得,如果一个类,其中的属性比较多,我们的set方法因此也会比较多,加上类的其他方法,整个看起来就比较臃肿了,因此我们将这些比较繁杂的设置步骤单独建一个类,来对该类进行相应的属性设置,按照我们的要求构造出原来的类,当然这是从使得代码简洁的角度来说,功能上有点类似于工厂模式,通过不同的生成器来生成各自具有不同特征的对象。不过接下来要讲的Android中的AlertDialog并没有体现这一点。

应用实例

为了更充分了解生成器模式,下面是一段来自维基百科的对于生成器模式讲解时用的一段代码,从中,从中我们不难看出生成器模式的代码结构。

 //Pizza基类
 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; }
 }
 
 
 //pizza生成器抽象类
 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();
 }
 
 //具体的pizza生成器类
 class HawaiianPizzaBuilder extends PizzaBuilder {
   public void buildDough()   { pizza.setDough("cross"); }
   public void buildSauce()   { pizza.setSauce("mild"); }
   public void buildTopping() { pizza.setTopping("ham+pineapple"); }
 }
 
 
 class SpicyPizzaBuilder extends PizzaBuilder {
   public void buildDough()   { pizza.setDough("pan baked"); }
   public void buildSauce()   { pizza.setSauce("hot"); }
   public void buildTopping() { pizza.setTopping("pepperoni+salami"); }
 }
 
 //创建pizza
 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();
   }
 }
 
 //创建实例
 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();
   }
 }

但是Android中的Builder则作为了AlertDialog的一个内部类用来对于AlertDialog的一些属性的设置,然后通过内部类创建一个实例出来,这样一来,所起的作用也就是仅在于将属性设置部分置于一个结构包起来,方便后期的维护。

至此设计模式中较为常用的模式讲解学习心得分享结束,接下来开始展开JVM的系列文章,同时也会补充一些平时遇到的一些其它的设计模式等相关的东西。

女装
文章评论