java设计模式之策略模式
2016-02-23 21:49
405 查看
在这里我不想再说什么策略模式是行为型模式中的一种之类的比较笼统的话(当然这种话用还是有用的),直接上例子解析,简单易懂。设计模式很多时候就是多余接口和抽象类的灵活运用,策略模式也不例外,所以废话不多说直接开始。
先实现一个接口Algorithm
当要增加算法是可以灵活添加,不影响调用的方式。
策略模式还有一种实现的方式,区别在于辅助类Assist,抽象Assist类,让各个算法继承
上面的两种策略模式的实现方式都可,至于那种更好仁者见仁,不多说了
参考:/article/1354306.html
先实现一个接口Algorithm
public interface Algorithm { public void operate(); }再写两个实现类
public class Add implements Algorithm { public void operate() { // TODO Auto-generated method stub System.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 stub format(); 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(); } }
上面的两种策略模式的实现方式都可,至于那种更好仁者见仁,不多说了
参考:/article/1354306.html
相关文章推荐
- JDK5并发(2) Locks-ReentrantLock
- java学习笔记(雍俊海)
- Java开发中的23种设计模式详解
- 最好的8个Java RESTful框架
- 【JAVA】18、二维数组
- java设计模式之观察者模式
- Eclipse全键盘编码攻略之一——入门
- 用Java实现的简易聊天系统(J2SE初学者练手项目)
- 上机题目(高级)- 电子词典(Java)
- Java设计模式菜鸟系列(七)命令模式建模与实现
- Java的局部变量没有系统默认初始值
- JAVA中的泛型
- windows7+eclipse+hadoop2.5.2环境配置
- 解决springmvc中文件下载功能中使用javax.servlet.ServletOutputStream out = response.getOutputStream();后运行出异常但结果正确的问题
- Spring环境下的 junit 集成测试3
- maven管理Java web项目WEB-INF/lib中jar包不能被引入的问题解决
- java学习日记——this关键字
- 深入理解Java的接口和抽象类
- kettel could not create java virtual machine
- 76_81java