您的位置:首页 > 其它

设计模式学习笔记

2015-02-08 10:04 267 查看
学习了马士兵老师《设计模式视频教程》和相关资料的一些感悟

第一课:观察者模式

优点:利用事件传递模式使类与类进行解耦,减少轮询资源消耗

仿照Java GUI 写的一个小例子,可以很好的说清楚观察者模式

package awt;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class Test {

public static void main(String[] args) {

Button b = new Button();
b.addActionListener(new MyActionListener());
b.addActionListener(new MyActionListener());
b.buttonPressed();
}

}

class Button {
private List<ActionListener> ActionListeners =  new ArrayList<ActionListener>();
public void buttonPressed(){
for(int i = 0;i< ActionListeners.size();i++ ){
ActionListener a = ActionListeners.get(i);
a.actionPerformed(new ActionEvent());
}
}
public void addActionListener(ActionListener l){
ActionListeners.add(l);
}
}

interface ActionListener{
public void actionPerformed(ActionEvent e);

}

class MyActionListener implements ActionListener{

@Override
public void actionPerformed(ActionEvent e) {
System.out.println("ButtonPressed");
System.out.println(e.getWhen());

}

}

class ActionEvent{
public long getWhen(){
return System.currentTimeMillis();
}
public Object getSource(){
return null;
}

}


第二课:过滤器模式

感悟:

1.一般操作过程会抽象成一个类,类里面封装的函数就是操作的逻辑过程,这样可以利用策略模式,达到快速变换,解耦的目的

2. 怎么解决 链条式编程,只要把与构造相关的函数返回本对象的引用

类似这样

//************** 我是代码分割线 *********

fc.addFilter(new HTMLFilter())
.addFilter(new SesitiveFilter());

//...........

public FilterChain add(Filter filter){
filters.add(filter);
return this;
}

//************** 我是代码分割线 *********

第三课:策略模式

怎么判断任意数组的元素大小?可以实现Comparable接口的compareTo函数

元素实现Comparable的CompareTo方法,缺点:这个类只能有一种比较逻辑了

怎么解决呢?Comparator的使用,类中定义一个Comparator变量

Comparable的CompareTo方法中 return new CatHeightComparator.compare(this,o);

//************** 我是代码分割线 *********

public int compareTo(Object o) {

return comparator.compare(this, o);

}

//************** 我是代码分割线 *********

第四课:代理模式

代理模式用继承实现,都调用父类的方法

代理模式用聚合实现,都调用成员变量的方法

聚合比继承更灵活,继承层次会无限制,

代理就是实现方法添加额外操作的方式

反射就是得到class就可以有很多api可以得知这个类的方法属性等,然后进行操作

第五课:工厂模式

工厂模式把产生过程封装起来,或者说控制起来,不能谁都可以随随便便new一个类,工厂类,专门生产类的类类型

第六课:其它模式

桥接模式:运用聚合代替继承,使用桥接模式,两个维度排列组合

装饰模式:又称转换器,如InputStreamReader,将InputStream转换成一个Reader

命令模式: 为了文档编辑undo功能发明,其实就是保持一个任务队列,然后可以依次执行或者依次放弃执行任务

State模式:跟策略模式没什么区别 准备一组算法,并将每一个算法封装起来,使得它们可以互换

以上我们简单的讨论了

观察者模式,策略模式,动态代理,工厂模式,桥接模式,命令模式

记住一句话,80%的模式是 IF-Else 语句 的实现
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: