资讯专栏INFORMATION COLUMN

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

thursday / 2378人阅读

摘要:目录生成器模式为什么使用生成器模式应用实例生成器模式生成器模式英是一种设计模式,又名建造模式,是一种对象构建模式。

目录

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

应用实例

生成器模式

生成器模式:(英: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的系列文章,同时也会补充一些平时遇到的一些其它的设计模式等相关的东西。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/64652.html

相关文章

  • 慕课网_《探秘Spring AOP》学习总结

    时间:2017年09月03日星期日说明:本文部分内容均来自慕课网。@慕课网:http://www.imooc.com 教学源码:https://github.com/zccodere/s...学习源码:https://github.com/zccodere/s... 第一章:课程介绍 1-1 面向切面 课程章节 概览 AOP使用 AOP原理 AOP开源运用 课程实战 课程总结 面向切面编程是一种...

    Tony_Zby 评论0 收藏0
  • webpack-demos:全网最贴心webpack系列教程和配套代码

    摘要:全网最贴心系列教程和配套代码欢迎关注个人技术博客。所以我花费了个多月整理了这份教程,一共分成节,每节都有讲解,并且准备了配套代码。奈何深感水平不够,只有一腔热情,所以直接开放了教程和源码。 webpack-demos:全网最贴心 webpack 系列教程和配套代码 欢迎关注个人技术博客:godbmw.com。每周 1 篇原创技术分享!开源教程(webpack、设计模式)、面试刷题(偏前...

    LMou 评论0 收藏0

发表评论

0条评论

thursday

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<