`
chenhua_1984
  • 浏览: 1233965 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

java策略模式

阅读更多

      head first对策略模式的定义是:封装一系列算法,并把它们包装起来,使他们可以相互替换。在该书的第一章节模拟鸭子游戏里面,讲用策略模式改写,但本身用了代理这个模式,这里我理解的是一般使用策略模式就有一定程度的使用代理模式。看下面的例子。

这是一个代理模式的例子

package pattern.detegate;

 public interface SubJect {
	public abstract void request();
}
 
package pattern.detegate;

public class RealSubJect implements SubJect {

	
	public void request() {
		System.out.println("这里表示真实的对象");

	}

}
 
package pattern.detegate;

public class ProxySubject implements SubJect {

	private RealSubJect realSubJect;

	public void preRequest() {
		// .............
	}

	public void request() {
		preRequest();
		if (realSubJect == null) {
			realSubJect = new RealSubJect();
		}
		realSubJect.request();
		postRequest();
	}

	public void postRequest() {
		// .............
	}

}
 
package pattern.detegate;

public class TestDetegate {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		ProxySubject proxy=new ProxySubject();
		proxy.request();
		

	}

}

 这里将的是一个代理模式的简单的例子,一个接口,一个实现类,一个代理类,一个测试类。代理类实际上是一个中间的角色,实际上做事情的还是realSubJect!如果说这是一个代理模式!那么我在网络上看别人对策略模式的理解的一个例子,大致如下:

public interface Person {
        public void speakLanguage();
}
 
public class Chinese implements Person {
 public void speakLanguage() {
   System.err.println("I speak Chinese!");
}
}
 
public class StrategyPerson {
private Person person;

public StrategyPerson(Person person){
   this.person = person;
}
public void speakLanguage(){
   person.speakLanguage();
}
}
 

 

public class TestMain {
public static void main(String[] args){
   Person person = new Chinese();
   StrategyPerson sp = new StrategyPerson(person);
   sp.speakLanguage();
}
}

 这个例子的作者说这是策略模式,但我感觉和我的代理模式好像是一样的,对代理模式和策略模式,我有点混淆了。。。

还是策略模式本身在设计的时候就包含了代理模式,代理模式这是策略模式的一个小小的体现呢?期待在工作的过程中能慢慢的搞清楚这个问题!

0
1
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics