设计模式(一)策略模式

1.概念、用处和意义

设计模式是人们面对同类型软件工程设计问题所总结出来的一些有用经验,设计模式不是代码,而是某类问题的通用解决方案

OO面向对象是原则,设计模式是在基础上的具体方法或工具

设计模式的本质目的是使软件工程在维护性、扩展性、变化性、复杂度方面成O(N)

2.策略模式原理

模拟鸭子项目:功能(鸭子都会嘎嘎叫、会游泳、颜色不一样),子类继承父类 实现

项目的新需求:添加新功能(有些鸭子会飞),不是所有子类都有该功能

    继承的问题,对类的局部改动,尤其超类的局部改动,会影响其他部分(有些子类不需要这种功能)。影响会有溢出效应

用OO解决新需求的不足(把功能放在子类里面),代码复用性降低,覆盖

    超类里面挖的一个坑,每个子类都要来填,增加工作量,复杂度O(N2)。不是好的设计方式

用策略模式解决新需求:

需要新的设计方式,应对项目的扩展性,降低复杂度

    分析项目变化部分与不变化部分,提取变化部分,抽象成接口+实现;

    哪些功能是根据新需求变化的;

重新设计模拟鸭子项目:

    1.接口 interface FlyBehavior, Fly生成相应的行为组class NoFlyBehavior/Fast implements FlyBehavior

       接口 interface QuackBehavior....

       好处:新增行为简单,行为类更好的复用,组合更方便。基友继承带来的复用好处,没有挖坑

    2. 父类abstract class Duck{

                FlyBehavior flyBehavior;

                QuackBevior quackBehavior;

                public Duck(){}

                public void Fly(){flyBehavior.Fly();}
                public void setFly(FlyBehavior f){动态设置行为}

                public void Quack(){quackBehavior.Quack();}

                public void setQuack(QuackBevior q){动态设置行为}

                public abstract void display();

            }

    3.子类class GreenDuck extends Duck{

                    public GreenDuck(){

                    flyBehavior=new FastFlyBehavior();

                    ....

                    }

                    @Override

                    public void display(){}

              }

策略模式:分别封装行为接口,实现算法族,超类里放行为接口对象,在子类里具体设定行为对象。原则就是,分离变化部分,封装接口,基于接口编程各种功能。此模式让行为算法的变化独立于使用者。

3.策略模式注意点

分析项目中变化部分和不变化部分(当前项目中变化的,还要考虑以后新增加功能可能要变化的)

多用组合少用继承;用行为类组合,而不是行为的继承。更有弹性(相同行为可以替换,不同行为相互独立)

策略模式是由经验总结而来,没有相应的代码模板、库和框架来支持

找不到合适的模式解决问题,可能分析问题不透彻,还可能遇到的问题特殊,只能使用面向对象的基本原则,分析


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值