设计模式(5)--反向理解建造者模式
来源:互联网 发布:万网域名后台 编辑:程序博客网 时间:2024/06/07 03:15
什么是建造者模式?
建造者模式是一种创建行为模式,为了是创建对象而存在的设计模式,当对象是由多个简单对象组合而成,且对象组合不断变化的时候,这个对象的创建可以考虑使用建造者模式。
什么时候使用?
对象由多个简单对象组合而成,且对象的组合不断变化的时候。 例如汉堡、可乐可以看做成简单的对象,套餐是我们要创建的对象,套餐包含的对象的种类是不断变化的,套餐的创建就适合使用建造者模式。
有什么缺点?
1,建造者模式构建对象中的简单对象必须有公共的特点(继承自同一接口),使用范围有限。
2,内部逻辑复杂,增加了代码的层级
建造者实现:
以网上的餐厅套餐组合为例,一个套餐由汉堡和饮料组合而成。
首先要实现这个需求,我们要有个套餐类,这个类可以准备不同套餐,这个类也是实现建造者的关键。
public class MealBulider { public Meal prepareVegMeal(){ Meal meal = new Meal(); meal.addItem(“一种汉堡”); meal.addItem(“一种可乐”); return meal; } public Meal prepareChickMeal(){ Meal meal = new Meal(); meal.addItem(“另一种汉堡”); meal.addItem(“另一种可乐”); return meal; }}
这个类就是我们说的创建者,这个准备套餐就很容易了,不断的向Item中加产品(简单对象)就可以了, 然后想想如何创建Meal这个类呢? meal中必包含一个产品的List,用于保存汉堡,可乐等等信息,有一个添加产品的方法。
public class Meal { private List<Item> foodList = new ArrayList<>(); public void addItem(Item item){ foodList.add(item); }}
然后如果汉堡和可乐都能作为一个对象添加到Item中,那么很容易知道,这两个类必须都继承同一个Item接口。【建造者缺点之一】
interface Item(){}
一种汉堡 implements Item(){}
另外一种汉堡 implements Item(){}
一种可乐 implements Item(){}
另外一种可乐 implements Item(){}
以上,我们就完成了一个简单的建造者模式。
public class Client { public static void main(String[] args){ MealBulider bulider = new MealBulider(); Meal meal = bulider.prepareChickMeal(); Meal meal1 = bulider.prepareVegMeal(); }}
这样 meal中就有了我们需要的组合,当然 我们可以根据需求对简单对象层进行拆分,提取和优化。
现在,如果有第三种套餐,两份可乐的怎么做呢?很简单,在MealBulider中添加一个方法就可以获取这个套餐对象了。
阅读全文
0 0
- 设计模式(5)--反向理解建造者模式
- 设计模式(5):建造者模式
- 设计模式(5)-建造者模式
- 对设计模式-建造者(Builder)的理解
- 设计模式利剑5-建造者模式
- 设计模式系列5-建造者模式
- 设计模式(5) ------- 建造者模式
- 设计模式(5)-建造者模式
- 设计模式5-建造者模式
- 设计模式3(建造者模式)
- [设计模式]建造者模式(Builder)
- 设计模式(JAVA)-------建造者模式
- 设计模式(五)---建造者模式
- 设计模式--建造者模式(Builder)
- 设计模式(4):建造者模式
- 设计模式Builder(建造者)模式
- 设计模式(9):建造者模式
- 设计模式 - 建造者模式(Builder)
- VAE、GAN、Info-GAN:全解深度学习三大生成模型
- 处理SYSMAN用户坏块问题
- 在oracle中,怎么新建一个字符集是utf8的数据库(即数据库实例)
- 快速集成一个视频直播功能
- mysql开启远程访问权限
- 设计模式(5)--反向理解建造者模式
- Android layout布局属性、标签属性总结大全。
- 用Javascript获取页面元素的位置
- Ubuntu15安装RabbitVCS(SVN)客户端
- 常见面试代码总结
- Android项目为一个apk设置多个ICON图标和执行入口
- Android事件分发流程
- static变量可以被修改吗?
- 5分钟带你入门Redis