《大话设计模式》的一些笔记,以及自己一些理解,作为入门读物
先看一段“面向过程”的代码,这里为了节省时间先截图。
为了完成一个计算器程序,代码如下:
如果是为了解题,代码没有问题。但是如果面向工程实际,这段代码不易维护,因为在需求不断更新的情况下,很可能需要加入新功能等内容,需要反复的修改代码。
因此需要面向“对象”编程。书中举了“活字印刷”这一例子,生动形象的阐述了面向对象的好处:通过封装、继承、多态把程序的耦合度降低,利用设计模式使得程序更加灵活,易于修改,易于复用
由此进一步修改代码:将加减乘除操作封装到Operation类:
客户端代码:
修改之后,求解问题也没什么毛病。同时业务(Operation)和界面(客户端)也进行了分离,有进步。
但是如果要加入一个开根sqrt运算呢?
那就在switch里加一个sqrt呗,很简单。但这时就有一个问题,仅仅做一个开根运算,每次却都需要加减乘除参与编译,如果一不小心改错了代码(比如加法改成减法),那就出问题了。所以说不能修改其中一个而印象另外的几个功能。
继续修改,利用继承和多态:
已经初具雏形,其思想是要实例化对象。那么到底要实例化谁,未来会不会增加实例化对象,这些容易变化的对象,应该考虑用一个单独的类来做这个创造实例的过程,这就是工厂。这里提出了简单工厂模式。
可以看到只需要输入运算符号,工厂就可以实例化合适的对象,通过多态,返回父类的方式实现计算器结果。
客户端: