您现在的位置:新闻首页>开奖大厅

设计模式读书笔记

2018-07-11 16:35编辑:szimden.com人气:


      流水作业大家应该都清楚吧!在流水作业中,我们可以将一些复杂的东西给构建出来,例如汽车。我们都知道汽车内部构件比较复杂,由很多部件组成,例如车轮、车门、发动机、方向盘等等,对于我们用户来说我们并不需要知道这个汽车是如何构建出来的,它的各个部件是如何组装,我们只需要知道一点:这是一辆完整的汽车。同样KFC也是这样的,在KFC中我们吃套餐也不需要知道这个套餐是怎样做出来的,我们只需要在店里面向服务员点就可以得到相应的套餐了。对于这两个例子我们通过指定某个对象类型就可以得到一个完整的对象,而无须关心其内部的构建。

11111

      在软件开发中,也会存在一些构造非常复杂的对象,这些对象拥有一系列的成员属性,这些成员属性有些是基本数据类型,有些是引用类型,总之就是一句话,这个对象的构建比较复杂。在这里我们就将复杂对象当做汽车,成员属性当做部件,对象的构建当做汽车的组合。对于用户而言我们总是希望我们在使用对象时足够简单,如果一个复杂的对象直接丢给用户,用户会是痛苦不堪的(给你一堆部件,你来组装成一辆汽车看看),除了这个构建的过程外,可能用户会忘记某些成员属性。所以我们就希望能够像使用汽车一样使用复杂的对象:直接告诉你我需要的对象名或者对象类型,你返回一个完成的对象实例给我。建造者返回给客户一个完整的的产品对象,而客户端无须关心该对象所包含的额属性和组建方式,这就是建造者模式的设计动机。

一、模式定义

      建造者模式将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。

      建造者模式构建复杂对象就像造汽车一样,是一个一个组件一个一个步骤创建出来的,它允许用户通过制定的对象类型和内容来创建他们,但是用户并不需要知道这个复杂对象是如何构建的,它只需要明白通过这样做我可以得到一个完整的复杂对象实例。

二、模式结构

      建造者模式的UML结构图:

222222

      建造者模式主要包含四个角色:

      Builder:抽象建造者。它声明为创建一个Product对象的各个部件指定的抽象接口。
      ConcreteBuilder:具体建造者。实现抽象接口,构建和装配各个部件。
      Director:指挥者。构建一个使用Builder接口的对象。它主要是用于创建一个复杂的对象,它主要有两个作用,一是:隔离了客户与对象的生产过程,二是:负责控制产品对象的生产过程。
      Product:产品角色。一个具体的产品对象。

三、模式实现

      KFC里面一般都有好几种可供客户选择的套餐,它可以根据客户所点的套餐,然后在后面做这些套餐,返回给客户的事一个完整的、美好的套餐。下面我们将会模拟这个过程,我们约定套餐主要包含汉堡、薯条、可乐、鸡腿等等组成部分,使用不同的组成部分就可以构建出不同的套餐。

33333

      首先是套餐类:Meal.java

public class Meal { private String food; private String drink; public String getFood() { return food; } public void setFood(String food) { this.food = food; } public String getDrink() { return drink; } public void setDrink(String drink) { this.drink = drink; } }

     然后是套餐构造器:MealBuilder.java

public abstract class MealBuilder { Meal meal = new Meal(); public abstract void buildFood(); public abstract void buildDrink(); public Meal getMeal(){ return meal; } }

      然后是套餐A、套餐B。这个两个套餐都是实现抽象套餐类。

public class MealA extends MealBuilder{ public void buildDrink() { meal.setDrink("一杯可乐"); } public void buildFood() { meal.setFood("一盒薯条"); } }

 

public class MealB extends MealBuilder{ public void buildDrink() { meal.setDrink("一杯柠檬果汁"); } public void buildFood() { meal.setFood("三个鸡翅"); } }

      最后是KFC的服务员,它相当于一个指挥者,它决定了套餐是的实现过程,然后给你一个完美的套餐。

(来源:网络整理)

织梦二维码生成器
已推荐
0
  • 凡本网注明"来源:的所有作品,版权均属于中,转载请必须注明中,http://www.szimden.com。违反者本网将追究相关法律责任。
  • 本网转载并注明自其它来源的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品来源,并自负版权等法律责任。
  • 如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。






图说新闻

更多>>