java设计模式之策略模式
来源:互联网 发布:知乎 显微镜 编辑:程序博客网 时间:2024/06/05 09:32
在这里我不想再说什么策略模式是行为型模式中的一种之类的比较笼统的话(当然这种话用还是有用的),直接上例子解析,简单易懂。设计模式很多时候就是多余接口和抽象类的灵活运用,策略模式也不例外,所以废话不多说直接开始。
先实现一个接口Algorithm
public interface Algorithm {public void operate();}再写两个实现类
public class Add implements Algorithm {public void operate() {// TODO Auto-generated method stubSystem.out.println("加法");}}
public class Div implements Algorithm {public void operate() {System.out.println("除法");}}最后实现一个辅助类(有些地方会说这个辅助类可有可无,但是我还是觉得这个比较有用)
public class Assist {private Algorithm alg;public Assist(Algorithm alg){this.alg = alg;}public void operate(){format();alg.operate();}/** * 辅助功能 */public void format(){System.out.println("格式检查");}}最后调用这个Assist类即可
public class Calc {public static void main(String[] args){Assist as ; as = new Assist(new Add());as.operate();as = new Assist(new Div());as.operate();}}
当要增加算法是可以灵活添加,不影响调用的方式。
策略模式还有一种实现的方式,区别在于辅助类Assist,抽象Assist类,让各个算法继承
public abstract class AssistS {/** * 辅助功能 */public void format(){System.out.println("格式检查");}}各个算法类中继承这个抽象类作为辅助功能完善自己的功能
public class Div extends AssistS implements Algorithm {public void operate() {format();System.out.println("除法");}}
public class Add extends AssistS implements Algorithm {public void operate() {// TODO Auto-generated method stubformat();System.out.println("加法");}}调用方式上麻烦了一些,调用者需要记更多的东西了(个人觉得)
public class Calc {public static void main(String[] args){/*Assist as ; as = new Assist(new Add());as.operate();as = new Assist(new Div());as.operate();*/Add ad = new Add();ad.operate();Div dv =new Div();dv.operate();}}
上面的两种策略模式的实现方式都可,至于那种更好仁者见仁,不多说了
参考:http://blog.csdn.net/zhangerqing/article/details/8243942
0 0
- Java设计模式之策略设计模式
- Java设计模式之策略设计模式
- Java设计模式之策略
- Java设计模式之策略模式
- java设计模式之 策略模式
- JAVA 设计模式之 策略模式
- java设计模式之策略模式 Strategy
- java设计模式之策略模式
- java设计模式之策略模式
- 浅谈Java设计模式之---策略模式
- java设计模式之策略模式
- Java设计模式之策略模式
- java设计模式之策略模式
- Java设计模式之策略模式
- Java设计模式之策略模式
- java设计模式之策略模式
- 设计模式之策略模式(java)
- Java设计模式笔记之策略模式
- 如何在MacBook上不使用VPN的情况下上Google等国外网站
- kidd风IOS开发日志之Git的常用终端指令
- Android日常开发60条经验
- C++2远征之离港篇
- linker command failed with exit code 1 (use -v to see invocation)
- java设计模式之策略模式
- HDU 1233
- 2016/2/23 我的博客开通了
- hdu3572Task Schedule
- 我为何放弃Gulp与Grunt,转投npm scripts(下)
- CODEFORCES 629 D Babaei and Birthday Cake
- STL_multiset
- 运算符重载4(有指针成员指向动态内存时)
- 详解GIT网络传递数据的加密解密过程