策略模式
来源:互联网 发布:vb中ascii码 编辑:程序博客网 时间:2024/09/21 06:34
原文链接:http://blog.csdn.net/u011593278/article/details/9738475
策略模式设计原则
a) 封装变化的概念
b) 编程中使用接口,而不是对接口的实现,面向接口编程;
策略模式的意义
a) 策略模式使开发人员能够开发出由许多可替换的部分组成的软件,并且各个部分之间是弱连接的关系。
b) 弱连接的特性使软件具有更强的可扩展性,易于维护;更重要的是,它大大提高了软件的可重用性。
策略模式的组成
a) 抽象策略角色:策略类,通常由一个接口或者抽象类实现
b) 具体策略角色:包装了相关的算法和行为
c) 环境角色:持有一个策略类的引用,最终给客户端调用的。
策略模式的编写步骤
a) 对策略对象定义一个公共接口。
b) 编写策略类,该类实现了上面的公共接口
c) 在使用策略对象的类中保存一个对策略对象的引用。
d) 在使用策略对象的类中,实现对策略对象的set和get方法(注入)或者使用构造方法完成赋值
策略模式的缺点
a) 客户端必须知道所有的策略类,并自行决定使用哪一个策略类。
b) 造成很多的策略类。
解决方案:采用工厂方法。
package com.zp.pattern.strategy;public interface Strategy {public int caculate(int a,int b);}package com.zp.pattern.strategy;public class Add implements Strategy {@Overridepublic int caculate(int a, int b) {return a + b;}}package com.zp.pattern.strategy;public class Multiple implements Strategy {@Overridepublic int caculate(int a, int b) {return a * b;}}package com.zp.pattern.strategy;public class Environment {//这是父类的引用,创建的对象可以将指向子类对象的引用赋给父类引用;private Strategy strategy;public Environment(Strategy strategy){this.strategy = strategy;}public Strategy getStrategy() {return strategy;}public void setStrategy(Strategy strategy) {this.strategy = strategy;}//父类引用指向子类对象,这里的strategy已经指向对应子类对象;public int caculate(int a,int b){return strategy.caculate(a,b);}}package com.zp.pattern.strategy;public class Test {public static void main(String[] args) {Strategy add = new Add();Environment e1 = new Environment(add);System.out.println(e1.caculate(3,4));Multiple multiple = new Multiple();Environment e2 = new Environment(multiple);System.out.println(e2.caculate(3,4));}}
结果:7 12
注:主要应用了多态,父类引用指向子类对象,通过父类引用这一个变量,接收多个子类对象,由于父类引用已经通过构造器的初始化指向了子类对象,所以父类引用的调用相当于子类对象的调用,策略模式中既有类的封装,又有面向接口的编程;
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- Oracle 备份 与 恢复 概述 .
- 【设计模式】学习笔记3:装饰者模式(Decorator )
- VC++使用ADO方法读写Microsoft Access本地数据库文件(不用ODBC)
- 增强for循环
- RMAN 备份与恢复 实例 .
- 策略模式
- Oracle Rman 命令详解(List report backup configure) .
- DM6467T移植图像算法
- Oracle—用户管理的完全恢复(三)
- ORACLE EXP/IMP 说明 .
- 学习计划战略纲领
- sysdba,sysoper,normal 以及sys,sysdba,dba概念区别 .
- 响应者链
- 自己写Lucene分词器原理篇——ChineseAnalyzer简单讲解