少年他曾来过

导航

 

学习了马士兵老师《设计模式视频教程》和相关资料的一些感悟

 

第一课:观察者模式

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

      仿照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 语句 的实现

 

posted on 2015-02-08 10:04  少年他曾来过  阅读(164)  评论(0编辑  收藏  举报