策略模式

策略模式定义了算法簇,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。

  1. 将超类A中变化的部分提取出来
  2. 将这些变化的部分,分别设计接口,即其类B, C, D和子类BB, BBB, CC, CCC, DD, DDD
  3. 在超类A中使用变量记录
A{
B varb;
C varC;
void getBFunc()
{
B.func();
}
void getCFunc()
{
C.func();
}
}
  1. 在A的子类中new具体的B和C等接口
AA : A{
AA()
{
varb = new BB;
varc = new CC;
}
}
  1. A a = new AA;
a.getBFunc();就会调用BB的getBFunc()实例;
  1. 动态修改实现
在超类中增加setter方法,修改实例化的B,C
A{
void setB(B b)
{
varb = b;
}
}

A a = new AA;
a.getBFunc(); //此处调用构造函数中的BB
a.setB(new BBB);
a.getBFunc(); //此处调用赋值的BBB中的方法

for example:
角色和武器;
  • 有很多种游戏角色
  • 有许多种武器
  • 每个角色只能使用一种武器
  • 可以在游戏过程中更换武器

如果说用策略模式实现角色的某种行为,这句话意味着,角色的行为被封装进入一组类中,可以被轻易的扩充和改变,如果需要,甚至在运行时也可以改变行为;比如使用武器,使用武器这个行为会被封装在一组类中,可以扩充为使用各种类型的武器,角色可以在运行时决定使用哪种武器。

为什么要这么做?
  1. 将变化的部分脱离出超类,那么变化的部分就可以变成算法簇,可以实现一系列的算法
  2. 在实际使用的类中,根据需要使用某一种算法
  3. 达到解耦和组合的目的
  4. 可以动态修改实现

总结:将算法提取出来,实现算法簇
根据实际使用实例化具体的算法
动态修改使用的算法
多用组合,少用继承


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值