继承与策略模式

 

  子类从父类继承行为时有这么几种情况:

1. 这个行为在【所有或大多数】子类的的实现皆相同。那么只需要在父类实现代表【大多数】的行为,并对【个别】行为不同的子类进行【重写】即可。

图片

2. 这个行为对于【大多数】子类都有【不同】的表现,即大多数子类都需要重写它,并且没有太多相同的代码需要复用。 那么可以在父类中只声明接口,而不对其实现;在子类中各自实现这个方法即可。

图片

3. 这个行为有着几种固定的表现模式(算法簇),部分子类中的表现相同,即有代码可以复用。
 
图片

例如上图,如果有20个子类是呱呱叫,15个子类是吱吱叫,30个子类是不会叫。
如果用方式1,把谁的实现放到父类都不恰当。
如果用方式2,那大量的重复代码就没法避免。

这种情况下就可以采用【策略模式】(Strategy Pattern)。

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


简单的讲,就是把行为的实现【归类】,并只实现一次,调用多次。

图片

代码下载  https://github.com/darrendev/StrategyPattern  

 

 

补充:

这个模式破除了一种思维定式:类只能是某种【事物】

而这里把类当做某种【行为】的一个具体实现

这种异想天开似的做法使得相似的行为可以得到【复用】

行为的消费者只需要关心【接口】,而不再需要四处复制和修改【实现】

 

 

 

 

转载于:https://www.cnblogs.com/darrendev/p/3481389.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值