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();
}
}
这个例子的作者说这是策略模式,但我感觉和我的代理模式好像是一样的,对代理模式和策略模式,我有点混淆了。。。
还是策略模式本身在设计的时候就包含了代理模式,代理模式这是策略模式的一个小小的体现呢?期待在工作的过程中能慢慢的搞清楚这个问题!