设计模式一之策略模式
来源:互联网 发布:文件夹加密软件破解版 编辑:程序博客网 时间:2024/05/18 21:42
定义:
定义算法族并封装,可相互替换。让算法的变化独立于使用算法的客户。
这里就举超人的例子来说明,假定一个超人类 Super 是生产各种超人的
public abstract class Super{//超人的飞行void public Fly(){System.out.println("我是超人我会飞");}//超人的每个技能都不相同,这里提供多态public abstract Skill(); //超人的变身能力(假定为通用属性)public void Shape(){System.out.println("我是超人一定会变身");}}
但超人们有些会飞,有些不会飞,怎么办了,这时候我们就应该引入接口类Flyable
public interface Flyable{void Fly();}
引入后,我们需要继承接口类,并实现Fly方法
public Flywithpower implments Flyable(){public void Fly(){System.out.println("我是超人我会飞");}}public Flynoways implments Flyable(){public void Fly(){System.out.println("我是超人但我不会飞");}}
此时我们的 飞行 方法已经准备好了,这时候可以改造 Super 类了(在Super中引入接口类)
public abstract class Super{//只需引入接口类,就可以实例化其他继承类了Flyable flyable;//使用接口类对应的方法void performFly(){flyable.Fly();}//设置动态行为,改变飞行动作void setFly(Flyable fly){flyable = fly;}//超人的每个技能都不相同,这里提供多态public abstract void Skill(); //超人的变身能力(假定为通用属性)public void Shape(){System.out.println("我是超人一定会变身");}}
这时候咸蛋超人出来了 Superbadegg
class Superbadegg extends Super{//构造函数自动实例化飞行接口类Superbadegg(){flyable = new Flywithpower();}public void Skill(){System.out.println("动感光波");}}
终于搭好了框架,是时候生产超人了
public static void main(String args[]){//上转型Super super = new Superbadegg();//调用继承了飞行接口类的 我会飞super.performFly();//然而这个时候超人被打残了,连飞都飞不起起来了,这需要我们改变其飞行属性super.setFly(new Flynoways());super.performFly();}
结果:我是超人我会飞
我是超人但我不会飞
感悟:为可枚举且变化独立提供接口 (如飞行)
在Super中声明接口类并在方法中调用
在Super子类中实例化飞行接口类
在主类中使用上转型并调用fly方法
定义:
定义了算法族,并分别封装起来,让它们之间可以相互替换。此模式让算法的变化独立于使用算法的客户。
例子:魂斗罗(更换子弹的类型)
5 0
- 设计模式一之策略模式(strategy)
- 设计模式之策略模式(一)
- 设计模式一之策略模式
- 设计模式(一)之策略模式
- 设计模式一之策略模式
- 每日一设计模式之策略模式
- 设计模式之策略模式 一
- 设计模式一 策略模式
- 设计模式(一) 策略模式
- 设计模式一:策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- vector删除元素和查找
- MYSQL数据表建立外键
- 2440slib.s
- C++智能指针笔记
- 圆圈进度条
- 设计模式一之策略模式
- QTP中action使用,包括多action复用(转)
- 【Android 系统开发】使用 Source InSight 阅读 Android 源码
- 分页求总页数
- oracle中,一些独有的函数用法
- MongoDB C# / .NET Driver 中IMongoQuery的内部实现Query的用法
- 不同dll或者exe中释放内存
- "无法找到“XXX.exe”的调试信息,或者调试信息不匹配。未使用调试信息生成二进制文件"的解决方法
- Image Request