学不可以已!
在这之前也有接触到过设计模式、只是之前的项目没有讲究过多的架构、故而一直都没有去深究设计模式。到目前接触到的语言也有几种、用的比较多的就是C# and Objective-C 。项目做多了自然就发现有些东西是可以简化或者是优化、便于应用的扩展。
先来温习一些之前经常为提到但是没有经常使用的设计模式。
1. 简单工厂
概念:说的通俗些就是工厂根据不同的参数创建对应的产品。
例如:有个简单工厂是负责计算的 我传一个加号就返回一个算加法的计算器、我传一个减号就返回一个算减法的计算器。
该设计模式如果要增加产品,必须修改工厂方法才能实现。是一个工厂可以生产多个产品(一对多)。
如果只从面向对象的角度考虑、简单工厂其实就是一个组合类、只要需要就可以将一个产品组合到简单工厂中甚至都可以不用抽象产品。
所以严格的讲我到觉得简单工厂不应该用到抽象或者接口的概念、符合简单一词。
2. 工厂方法
概念:工厂方法有别于简单工厂却是简单工厂的升级。
不同之处、简单工厂是通过参数来控制产品的生产、这里使用的是重载。不同的工厂实现同一个工厂方法生产不同的产品。
、是一个工厂生产一个产品(一对一)。如需增加产品、首先要增加工厂。是一对一的生产模式。
例如:还是一个抽象工厂是负责计算的。如果需要生产一个计算加法的计算器、首先就要有一个只生产加法计算器的工厂。
如果要生产一个计算减法的计算器、就要有一个生产减法计算器的工厂。
如图: 工厂A 负责生产的是产品A ,工厂B负责生产产品B,
从面向对象的角度看我们发现工厂方法就是一个重载。
3.抽象工厂
概念:说的明白些抽象工厂就是 简单工厂+工厂方法。
在简单工厂中根据参数创建对应的产品,在抽象工厂中变成了根据不同的实例方法来实现。
在工厂方法中不同的动作放在不同的产品中执行、在抽象工厂中变成了不同的动作在同一个产品中去实现。
总结
从对象关系的角度看:
- 简单工厂是一对多的关系 (一个工厂可以生成多个产品)
- 工厂方法是一对一的关系(一个工厂只能生产一个产品)
- 抽象工厂抽象了前面两个设计模式、(一生产线可以生产多个产品可以、多个生产线可以生产一个产品)
而这三个设计模式的出发点是工厂的作用、更多是扩展性演变而来。产品的抽象主要是一些列的行为和属性,工厂的抽象才设计的关键。再简单些概括就是是组合。源代码