Java设计模式——策略设计模式——接口的运用
来源:互联网 发布:淘宝的一元拍卖骗局 编辑:程序博客网 时间:2024/06/06 14:16
1.定义
定义一系列的算法,将这些算法分别封装起来并且可以相互替换使用,策略模式让算法独立于客户应用而独立变化。
2.代码示例
a.下面的代码遇到的问题可以用策略设计模式解决
public class Strategy{public static void main(String[] args){Move move = new Left();move.direction();}}abstract class Move{public abstract void direction();}class Left extends Move{public void direction(){System.out.println("向左移动");}}class Right extends Move{public void direction(){System.out.println("向右移动");}}class Front extends Move{public void direction(){System.out.println("向前移动");}}class Behind extends Move{public void direction(){System.out.println("向后移动");}}
基于上面的代码,将Left、Right、Front、Behind当作客户应用,Left客户应用现在让我们向左移动,我们已经实现了它;但是如果现在Left客户应用要我们向右移动,这时上面的方法就不可取了。我们该怎么办?很明显我们应该让客户应用与客户应用的需求独立开来,这样客户应用要什么需求我给你什么需求。策略设计模式让算法(需求)独立于客户应用而独立变化。策略设计模式怎么去实现?接口+类比对象的多态性。
b.用策略设计模式解决上述问题
public class Strategy{public static void main(String[] args){Move move = new Left(new LeftMove());move.direction();//现在Left客户应用要求实现向右移动Move m = new Left(new RightMove());m.direction();}}//接口interface MoveAct{public void direction();}//封装四个需求,与客户应用独立class LeftMove implements MoveAct{public void direction(){System.out.println("向左移动");}}class RightMove implements MoveAct{public void direction(){System.out.println("向右移动");}}class FrontMove implements MoveAct{public void direction(){System.out.println("向前移动");}}class BehindMove implements MoveAct{public void direction(){System.out.println("向后移动");}}abstract class Move{protected MoveAct moveAct;//接口变量public abstract void direction();}//四个客户应用class Left extends Move{public Left(MoveAct moveAct){this.moveAct = moveAct;}public void direction(){moveAct.direction();}}class Right extends Move{public Right(MoveAct moveAct){this.moveAct = moveAct;}public void direction(){moveAct.direction();}}class Front extends Move{public Front(MoveAct moveAct){this.moveAct = moveAct;}public void direction(){moveAct.direction();}}class Behind extends Move{public Behind(MoveAct moveAct){this.moveAct = moveAct;}public void direction(){moveAct.direction();}}
c.上述代码的优化
//代码优化//代码虽然优化了,但是有点不符合现实情况public class Strategy{public static void main(String[] args){Move move = new Left();move.setMoveAct(new LeftMove());Left left = (Left)move;left.direction();//现在Left客户应用要求实现向右移动move.setMoveAct(new RightMove());left.direction();}}//接口interface MoveAct{public void direction();}//封装四个需求,与客户应用独立class LeftMove implements MoveAct{public void direction(){System.out.println("向左移动");}}class RightMove implements MoveAct{public void direction(){System.out.println("向右移动");}}class FrontMove implements MoveAct{public void direction(){System.out.println("向前移动");}}class BehindMove implements MoveAct{public void direction(){System.out.println("向后移动");}}class Move{private MoveAct moveAct;//接口变量public void setMoveAct(MoveAct moveAct){this.moveAct = moveAct;}public void direction(){moveAct.direction();}}//四个客户应用class Left extends Move{}class Right extends Move{}class Front extends Move{}class Behind extends Move{}
0 0
- Java设计模式——策略设计模式——接口的运用
- Java设计模式—策略
- Java设计模式——策略模式
- JAVA设计模式——策略模式
- java设计模式——策略模式
- JAVA设计模式——策略模式
- Java设计模式——策略模式
- Java设计模式——策略模式
- java设计模式——策略模式
- Java设计模式——策略模式
- Java设计模式——策略模式
- Java设计模式——策略模式
- Java设计模式——策略模式
- java设计模式——策略模式
- java设计模式——策略模式
- Java设计模式——策略模式
- java设计模式——策略模式
- Java设计模式——策略模式
- cocos2dx 字母数字转换
- 蓝桥杯-基础练习-十六进制转
- CSS基本练习01
- 设置导航栏透明
- 2016.1.15 百度API和JSON的解析,还有总经理话的体会
- Java设计模式——策略设计模式——接口的运用
- 如何在AppCompatActivity中屏蔽系统的ActionBar使用自定义的ActionBar获得兼容性
- 飞龙的程序员书单 - 组原、OS、网络
- 01背包
- 常用正则表达式——银行卡号,2-6位中文名,手机号
- 如何删除软连接文件
- POJ 1159 Palindrome
- 在 win8 上安装 visual studio2005
- 图像局部特征抽取