标签:
学习了马士兵老师《设计模式视频教程》和相关资料的一些感悟
第一课:观察者模式
优点:利用事件传递模式使类与类进行解耦,减少轮询资源消耗
仿照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 语句 的实现
标签:
原文地址:http://www.cnblogs.com/hzmbbbb/p/4279726.html