学习了很长时间的设计模式,还是觉得理解的不够,我想写写日志可能对理解能加深.
设计模式的原则:
- 把会变化的部分取出并"封装"起来,不要和那些不需要变化的代码混合在一起,好让其他部分不会受到影响.
- 针对接口编程,而不是针对实现编程
- 多用组合,少用继承
- 为了交互对象间的松耦合而努力.(两个对象之间松耦合,他们依然可以交互,但是不太清楚彼此的细节)
一.策略模式(Strategy)
定义: 定义了算法族,分别封装起来,让他们之间可以互换,此模式让算法的变化独立于使用算法的客户.
理解: 如果利用继承的话,如果添加子类,会一个个的覆盖父类中的方法.如果把变化的部分设为接口,如果需要实现接口的方法的类就继承此接口,又会造成很多代码重复,无法复用.所以想到了策略模式.策略模式就是当有些子类需要实现某些行为而另一些子类不需要实现某些行为,而且行为的实现也不一样的时候就用策略模式.策略模式就是把这些行为先抽象成几个接口,通过继承这些接口来实力化一些具体的行为.如果子类需要这些行为,就把这些具体行为组合进具体的类中,达到具体的类中实现具体行为的目的.
二.观察者模式(Observer)
定义:定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,他的所有依赖者都会收到通知并自动更新.
理解:观察者模式一般是在当一个主体状态发生改变时,其他一些物体会跟着改变的时候使用.如报纸订阅系统,气象局系统等等.总之就是类似这种情况时使用.观察者模式可以自己写也可以使用jdk提供的类来实现.但基本模式是一样的,就是有一个主体接口和一个观察者接口,主体接口有三个方法:注册观察者,删除观察者,通知观察者.具体主体要实现这三个方法.在自己实现的观察者模式中,需要自己写一个集合类,来注册观察者,而在jdk实现的类中是不用的.具体观察者可以有多个,他们都要实现观察者接口中的update方法(此接口只有这个方法),此方法是具体主体改变时候调用的方法,可以更新具体的观察者.具体观察者必须有主体的实例,并且在某个方法(可以是构造函数中,这样只要实例化具体的观察者就实现了注册)中实现自己对主体的注册.这样观察者模式就完成了.运行时是实例化一个具体主体类,和多个具体观察者类,实现注册的方法.这样,当具体的主体状态改变时,会调用通知观察者方法使观察者也跟着改变.(未完待续)