文档章节

设计模式之构建者模式

无极之岚
 无极之岚
发布于 06/04 07:36
字数 516
阅读 0
收藏 0

看过书,好的设计是选最简单又适合的设计模式,帮助我们实现代码解耦,减少重复的代码量

建造者模式就是spring里经常出现的xxxBuilder类,看了网上大部分教材,他大部分是这样用的:

// 有一个东西C,网上一般用飞机,我这里就用汉堡吧
// 汉堡里有三个成员类变量,生菜、鸡肉、面包
class hambuger{
private Lettuce l;
private Chicken chicken;
private Bread bread;
//get set 方法略
}
// 构建者类 每个方法返回组件需要的对象
class HambugerBuilder{
  public static Lettuce builderLettuce(){
   //return new Lettuce();
  }
  public static Chicken builderChicken(){
  // return new Chicken();
  }
   public static Bread builderBread(){
  // return new Bread();
  }
}

方法工厂类

其实从builder代码就可以看出,根据不同的方法放回不同的对象,这就很像方法工厂类,同样的通过不同的方法名,返回不同的对象。只不过从设计模式的角度,工厂模式返回的都属于同一族群的对象(可以认为拥有同一个父类)。然而构造者方法返回的对象之间可能关联性极弱。

Direcor

导演类是区分builder和factory的关键类,主要用途为:将builder方法中获取的对象组装成一个完整的产品(汉堡),代码如下:

class HambugerDirector{
  public Hambuger makeHambuger(){
    //HambugerBuilder调用三个方法,获取对象
	// 将三个对象 通过set方法 丢到汉堡类里
	// 一个有菜有肉的汉堡就出来了。
  }
}

总结

抛开导演类,builder和方法工厂极其相似,导演类主要负责了做汉堡是否放材料,以及放材料的顺序,为拼装的主要过程。

© 著作权归作者所有

无极之岚
粉丝 5
博文 88
码字总数 45805
作品 0
东莞
程序员
私信 提问
【设计模式笔记】(十六)- 代理模式

一、简述 代理模式(Proxy Pattern),为其他对象提供一个代理,并由代理对象控制原有对象的引用;也称为委托模式。 其实代理模式无论是在日常开发还是设计模式中,基本随处可见,中介者模式中...

MrTrying
2018/06/24
0
0
《JavaScript设计模式与开发实践》原则篇(2)—— 最少知识原则

最少知识原则(LKP)说的是一个软件实体应当尽可能少地与其他实体发生相互作用。这 里的软件实体是一个广义的概念,不仅包括对象,还包括系统、类、模块、函数、变量等。 单一职责原则指导我们...

嗨呀豆豆呢
2018/12/30
0
0
JavaScript设计模式总结

之前看过《JavaScript设计模式与开发实践》这本书,对书中的设计模式和一些相关案例也有了一定的了解,同时把这些设计模式的应用对应在在一些其他的项目中,进行了一些整理,如下仅供参考: ...

jefferyE
03/26
0
0
小菜学设计模式——设计模式总结之创建型

1、面向过程与面向对象 1)面向过程通过划分功能模块,通过函数间相互调用来实现,但需求变化时就需要更改函数,而你改动的函数有多少地方在调用她呢?关联多少数据,这是很不容易弄得清楚地...

learn_more
2015/07/05
180
0
JavaScript 中常见设计模式整理

开发中,我们或多或少地接触了设计模式,但是很多时候不知道自己使用了哪种设计模式或者说该使用何种设计模式。本文意在梳理常见设计模式的特点,从而对它们有比较清晰的认知。 JavaScript 中...

牧云云
2018/05/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

重新开始学Java——反射

概念 reflection:自省 反射:镜子可以反射阳光一个java类 或 对象 通过照"镜子"来认知自己 Java语言中是怎么实现照镜子? java.lang.reflect 包 提供了"照镜子"API(应用程序接口) 如果要...

大家都是低调来的
16分钟前
5
0
爬取720万条城市历史天气数据

内容爬虫完毕,校验完毕,缺失信息暂未统计。总数据720万,地区3200个,年份从2011-2019,大小950Mb,原始数据已丢失,需要的朋友可以自己运行脚本挂一晚上。中间遇到了很多坑,有机会我再写...

八音弦
20分钟前
10
0
python的字典类型

1、新建字典 通过键值对 dict_1 = {'a':1,'b':2,'c':3} 通过dict()函数 list_1 = ['adam', 'bob', 'cathy', 'david', 'emma'] list_2 = [1,2,3,4,5] dict_2 = dict(zip(list_1,list_2)) 2、字......

davidwbnu
22分钟前
2
0
springcloud vue.js 前后分离 activiti工作流

本商品为 :springcloud + Springboot 微服务\分布式 工作流 前后分离 + 跨域 版本 (权限控制到菜单和按钮) 后台框架 :springcloud Greenwich.SR1 + springboot 2.1.4 + activiti6.0.0 + ...

java框架开发者
28分钟前
10
0
【jQuery基础学习】07 jQuery表单插件-Form

本文转载于:专业的前端网站➦【jQuery基础学习】07 jQuery表单插件-Form 作用:jQuery Form插件的作用是为了让我们可以很方便地用ajax的方式提交表单,从而使我们提交表单的时候页面不用进行...

前端老手
37分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部