策略模式
来源:互联网 发布:linux移动文件命令 编辑:程序博客网 时间:2024/06/10 02:54
如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态的让一个对象在许多行为中选择一种行为。如果系统需要动态地在几种算法中选择一种。那么这些算法可以包装到一个个的具体算法类里面,而这些算法类都是一个抽象算法类的子类。
public interface Operation {
publicvoid op(double a,double b);
}
public class Add implements Operation {
public void op(double a, double b) {
double result = a + b;
System.out.println(result);
}
}
public class Sub implements Operation {
public void op(double a, double b) {
double result = a - b;
System.out.println(result);
}
}
public class Multi implements Operation {
public void op(double a, double b) {
double result = a * b;
System.out.println(result);
}
}
publicclass Div implements Operation {
publicvoid op(double a, double b) {
if(b != 0)
{
double result = a/b;
System.out.println(result);
}
else
{
System.out.println("除0了!");
}
}
}
publicclass Calc {
public Add add = new Add();
public Sub sub = new Sub();
public Div div = new Div();
public Multi multi = new Multi();
}
publicclass test1 {
publicstaticvoid main(String[] args) {
Calc c = new Calc();
c.add.op(11,22);
c.sub.op(22,11);
c.div.op(33, 11);
c.multi.op(33, 33);
}
}
也可以改写成下面形式:
publicclass Calc {
Operation operation;
public Calc(Operation operation){
this.operation = operation;
}
publicvoid op(double a,double b){
operation.op(a, b);
}
}
publicclass test1 {
publicstaticvoid main(String[] args) {
Calc add = new Calc(new Add());
add.op(11,22);
Calc sub = new Calc(new Sub());
sub.op(22,11);
Calc div = new Calc(new Div());
div.op(33, 11);
Calc multi = new Calc(new Multi());
multi.op(33, 33);
}
}
publicclass Param {
publicfinalstaticintadd = 1;
publicfinalstaticintsub = 2;
publicfinalstaticintmulti = 3;
publicfinalstaticintdiv = 4;
}
publicclass Calc {
Operation operation;
public Calc(int type){
switch(type){
case Param.add:
operation = new Add();
break;
case Param.sub:
operation = new Sub();
break;
case Param.multi:
operation = new Multi();
break;
case Param.div:
operation = new Div();
break;
}
}
publicvoid op(double a,double b){
operation.op(a, b);
}
}
publicclass test1 {
publicstaticvoid main(String[] args) {
Calc add = new Calc(Param.add);
add.op(11,22);
Calc sub = new Calc(Param.sub);
sub.op(22,11);
Calc div = new Calc(Param.div);
div.op(33, 11);
Calc multi = new Calc(Param.multi);
multi.op(33, 33);
}
}
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 使用MFC操作EXCEL文件
- 左滑关闭demo
- 线段树模板
- 【Oracle】PL/SQL提取一段字符串中的每个字符
- 使用TextView可以实现跑马灯效果
- 策略模式
- jQuery_统计图插件-fusioncharts-free
- 【跟随】Kirill Muzykov大神 Unity UGUI(1)
- Android基本概念
- 利用ajax和JSP技术实现网页中表单的局部刷新(只刷新表单数据,而不刷新整个页面)
- 适配器模式
- js window.onload 加载多个函数的方法
- 多线程
- iOS开发 - 苹果开发者账号那些事儿(三)