设计模式学习心得

最近看了<<head first设计模式>>这本书,图文并茂的书的确让人容易读进去,如果能多一些这样的技术类书籍就好了,很多书写的太枯燥看几眼就会睡着…先推荐下这本书~

以前不知道设计模式这个东西,但是看别人的代码好多地方都用到了,然后看书的时候恍然大悟原来用的是这种模式啊.

总结来看,设计模式的目的是OO设计时减少类之间的耦合度(loose coupling),这样在以后面对需求变动要进行修改时可以只进行较少的改动,从而避免引进更多的错误,增加可维护性.通常的代价是增加了类的数量.

良好的OO设计要满足可复用,可扩充,可维护的特性.

首先说一下设计原则

  • 将经常变动的部分与较固定的部分分开.将变动的部分封装起来
  • 多用组合,少用继承.组合比继承更加灵活,可以实现运行时的改变.
  • 对接口编程,而不是对实现编程.这个说的是尽量使用父类,这样可以使用同样的接口调动所有的子类,从而减少修改.
  • 类应对修改关闭,对扩展开发.就是说写好的类要尽量保证以后不用去修改它,同时可以对它进行扩展,比如在类中使用某父类,增加子类的数量会扩展该类的作用,但是并不用修改它.
  • 依赖倒置原则:要依赖抽象,不依赖具体.高层和低层组件都应该依赖抽象.这个原则我理解的不是很深…

设计模式呢,经历验证的OO设计经验,每个模式都适用于一定的场合(能解释一切的原则,什么都解释不了).

一.策略模式 strategy pattern

定义算法族,分别封装起来,让它们可以互相替换,让算法的变化独立于使用算法的客户.

当某行为可以采用多种策略时,将每种策略单独封装成类,这样可以动态指定所要使用的策略.

二.观察者模式

这个模式就像订阅报纸,每个人都可以像杂志社订阅报纸,每当有新报纸所有订阅的人都会接收到,当不想继续接受的时候可以取消订阅.观察者就相当于订阅报纸的人,它向被观察者注册自己,一旦被观察者有了新的消息,就会通知所有的观察者,同时观察者不想接收消息时就向被观察者注销自己.这是一种消息推送的模式.

三.装饰者模式

装饰者们和被装饰者都有相同的父类有相同的接口,每个装饰者接受继承自父类的一个对象作为参数,将被装饰者的行为进行扩展,但是仍然保持父类不变,这样我们就可以用相同的方法调用经过不同层次装饰的对象.我们可以用无数个装饰者包装一个组件,这是其它方法无法达到的.但是要注意装饰者会增加许多小类,可能会让使用者摸不着头脑.

四.工厂模式

书上把工厂模式分为了工厂方法和抽象工厂.总的来说就是把生成具体对象的方法封装起来,这样使用该对象时就不必关心对象是如何生成的,只知道有了该对象就行了.

五.单例模式

对于只需要一个对象的类,采用单例模式防止生成多个该类对象.方法是使用私有构造函数,静态getSingleton()函数在初次调用时生成实例.注意在多线程时可能失效.

六.状态模式

和策略模式比较像,但是目的不同.将多种不同的状态单独封装处理,这些状态有相同的接口可以相互替换,客户程序只需记录当前的状态,避免了出现很多的条件判断语句(其实都移动到各个状态类中了),这么做增加了类的数量,但是降低了耦合度.