目录
生成器模式+为什么使用生成器模式
应用实例
生成器模式
生成器模式:(英: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的系列文章,同时也会补充一些平时遇到的一些其它的设计模式等相关的东西。