java_23种设计模式之策略模式
来源:互联网 发布:iphone7p只有2g网络 编辑:程序博客网 时间:2024/05/17 22:49
关于设计模式至今理解不是很深,在此发表文章一方面为了加深对设计模式的理解,另一方面希望由此与大家进行交流。
今天研究了一下策略模式,对策略模式理解为:通过对抽象策略角色(抽象类、接口)的实现的包装,从未进行动态操作的过程。
详细解释如下:
1.抽象策略角色:策略类,包含要做的事情(方法),通常有抽象类或接口进行实现;
2.策略类的实现:包装了对要做的事情的具体做法和行为;
3.动态操作:持有对策略类的引用,从而可以动态选择需要的实现,最终交给某一客户端进行调用。
对于策略模式来说,核心的部分是持有对策略类的引用。
具体代码示例如下:
1./**策略类*/
public interface IStrategy {
/**策略方法*/
public abstract double add();
}
2./**策略类的实现,以下写了两个实现*/
public class ConcreteStrategy1 implements IStrategy {
/**示意性算法*/
public double add() {
// TODO 自动生成方法存根
System.out.println(this.getClass().getName() + "的加法运算");
return 0;
}
}
public class ConcreteStrategy2 implements IStrategy {
public double add() {
// TODO 自动生成方法存根
System.out.println(this.getClass().getName() + "的加法运算");
return 0;
}
}
3./**对策略类的引用*/
public class Context {
/**环境角色类*/
private IStrategy strategy;
public Context(IStrategy strategy) {
this.strategy = strategy;
}
/**策略方法*/
public double add() {
this.strategy.add();
return 0;
}
}
4./**客户端调用*/
public class Main {
/**
*@paramargs
*/
public static void main(String[] args) {
// TODO 自动生成方法存根
Context context = new Context(new ConcreteStrategy1());
context.add();//执行算法1
context = new Context(new ConcreteStrategy2());
context.add();//执行算法2
}
}
5.执行结果如下:
ConcreteStrategy1的加法运算
ConcreteStrategy2的加法运算
6.总结:
优点:可以动态的选择需要的实现;
缺点:需要自行去决定需要那些实现,即必须对每个实现类熟悉。
- java_23种设计模式之策略模式
- java_23种设计模式之代理模式
- java_23种设计模式之门面模式
- java_23种设计模式之适配器模式
- java_23种设计模式之单例模式
- java_23种设计模式之工厂方法模式
- java_23种设计模式之抽象工厂模式
- java_23种设计模式之模板方法模式
- java_23种设计模式之建造者模式
- java_23种设计模式之多例模式
- Java_23种经典设计模式详解
- Java_23种设计模式(一)
- Java_23种设计模式(二)----- 创建型模式
- Java_23种设计模式(三)----- 结构型模式
- Java_23种设计模式(四)----- 行为型模式
- 23种设计模式之策略模式
- Java23种设计模式之策略模式
- 23种设计模式之策略模式
- 利用正则表达式实现密码解析
- 在spyder中安装winpdb
- ScrollView当显示超出当前页面时自动移动到最底端
- 【算法设计】背包问题
- linux 命令 导入 导出数据库
- java_23种设计模式之策略模式
- jquery mobile 记录
- Ubuntu 下另一种隐藏文件的方法
- Visual Studio 文本替换 正则表达式
- PHP创建缩略图造成图片质量低下的完美解决方法
- IT男的补脑食谱
- VS2008环境下C++编程的LNK2019链接错误 后续不断补充
- Android 绘图 阴影制作(Shadow)
- java 阻塞队列