package com.moshi.celv;
public interface Caluator {
public void testcal(int a,int b);
}
package com.moshi.celv;
public class AddCal implements Caluator {
public void testcal(int a, int b) {
System.out.println("add--"+(a+b));
}
package com.moshi.celv;
public class ChengCal implements Caluator {
public void testcal(int a, int b) {
System.out.println("cheng--"+a*b);
}
}
package com.moshi.celv;
public class Context {
Caluator cal;
public Context(Caluator cal){
this.cal=cal;
}
public Caluator getCal() {
return cal;
}
public void setCal(Caluator cal) {
this.cal = cal;
}
public void testcal(int a,int b){
cal.testcal(a, b);
}
}
package com.moshi.celv;
public class Testcelv {
/**
策略模式(Strategy):策略模式是一种定义一系列算法的方法,从概念上来看,所有这些算法完成的都是相同的工作,
只是实现不同,它可以以相同的方式调用所有的算法,减少各种算法类与使用算法类之间的耦合。
*
策略模式和简单工厂模式有很多相似的地方,他是针对不同的算法对其进行封装,更强调的是对一种方法的封装。策略模式里面没有产生策略对象的方法,他是要接收每个策略或者算法对象的,产生算法对象的任务是交给客户端来完成,在客户端里面,用户需要根据具体情况生成对应的算法对象。Context类是就是对一种算法的引用,Context类接收算法对象,并提供给用户返回算法结果的方法,算法的实际调用也是在这个方法中进行的。所以,策略模式更加强调的是对方法的封装
简单的说,
1、工厂模式根据条件生产出产品给客户端用。而策略模式是客户端使用传参给Context的策略(你也可以理成产品),
传入策略的不同,调用同样方法得到的结果也不同。
2、工厂模式:客户端是使用工厂类生产的对象进行操作,策略模式:客户端使用自己传给Context的策略的对象进行操作。
* @param args
*/
public static void main(String[] args) {
Context con=new Context(new AddCal());
con.testcal(1, 2);
}
}