一次运用设计模式对现有系统进行重构的尝试(二)
关于这次尝试的实践在上次发文后(http://www.cnblogs.com/Ivan-Yan/archive/2008/10/29/1322119.html),得到了几位朋友(木野狐(Neil Chen) 、T2噬菌体等)的指点,在这里再次感谢你们的热心帮助。
思考
上次对于不同的产品入库用简单工厂模式重构后,就象朋友们所说,这个设计确实很不灵活:如果有新的产品(如原材料)入库作业,那么需要修改的地方太多了:工厂类,具体类...实际上违背了面向对象的设计原则:开放封闭原则。
经过学习思考后,认识到:这里的设计实际上还违背了依赖倒置原则:依赖于抽象,而不要依赖于具体实现。而简单工厂模式就存在这个弊端。
为了解决这个问题,我对此设计进行了再次重构:工厂方法模式
运用工厂方法模式再次重构
为每个产品作业的工厂建立抽象接口
半成品工厂类:
成品工厂类:
对入库作业进行抽象:
半成品入库作业具体类:
成品入库作业具体类:
Client端的作业:
可以看到Client端的作业均依赖于抽象,这就使得系统面对需求变更趋于稳定。
假如用户此时要假如原材料入库作业,那么此时的设计可以从容应对。
应对需求变化
加入原材料入库作业类:
为原材料作业建立工厂:
可以看到,面对变化,系统可以轻松扩展,而对原来产品的实现不用做任何更改,这个正是面向对象设计原则的关键所在。
看到几个朋友的建议,实际上在客户端是可以利用反射来完成的:
浙公网安备 33010602011771号