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();
}
}

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值