• 策略模式学习2---原理


    虽然使用继承可以满足现在各种的需求但是当客户的要求改变的时候我们一旦改变了超类的一些东西将会影响到子类中的许多东西;

    继承的问题:

          对超类的局部改变会影响其他部分。会有影响溢出的问题存在。

    所以在超类里面如果挖个坑,在子类继承的时候就会出现许多需求问题,这些坑都需要我们自己去填。为了开发的工作量的减少我们就需要使用我们的OO设计原则了、

    当我遇到一个新的项目的时候我应该考虑这些问题来解决我的项目:

      需要新的设计方式来满足项目的扩展性;降低复杂程度:

                              分析项目的变化部分和不变部分提取变化的部分,抽象成接口然后实现它。在编程的时候我们要面对接口的实现编程不要面对实现当下编程、

    使用接口来实现鸭子的飞行接口来解决鸭子不断需求的新变化;

    所以我们在超类中加入一些新的接口:

      public interface FlyBehavior{

        void fly();

                    }

    //加入了飞行的接口

      public interface QuackBehavior{

        void quack();

                      }

    //加入了叫的接口

    这样的好处是:使用了组合增加了代码的复用,同时解决了继承带来单一的困扰,在我们需要的时候只需要从这些组合中去继承这些东西实现接口就可以解决这个问题、

    重新设计鸭子项目:

    public abstract class Duck{

      FlyBehavior mFlyBehavior;

      QuackBehavior mQuackBehavior;

      public Duck(){}    //让子类可以自己选择自己的行为

      public void Fly(){

        mFlyBehavior.fly();

              }

      public void Quack(){

        mQuackBehavior,quack();

                }

      public abstract void display();

    }

    紧接我们就可以让我们的别的鸭子来继承这个Duck类这样我们来看看下面的代码;

    public class GreenHeadDuck extends Duck{

      public GreenHeadDuck(){

        mFlyBehavior=new GoodFlybehavior();

        mQuackBehavior=new  GaGaQuackBehavior();

                            }

        public void display(){}

    }

    }

    策略模式:

        分别封装行为为接口,实现算法族,超类里面放行为接口对象,在子类里面设定具体的行为对象。

        原则:分离变化的部分,封装接口,基于接口编程各种功能,此模式让行为的算法的变化独立于算法的使用者。

  • 相关阅读:
    hdu 3709 Balanced Number 数位dp
    通过大数据分析典型的长尾问题场景及解法
    【无人驾驶技术揭秘】从机器学习角度揭秘学习型避障小车的设计思路
    Git Flow——Git团队协作最佳实践
    【技术合集】新春来袭,锦囊妙计助程序员过个好年
    【最佳编程实践】编写「可读」代码的实践
    【开发工具推荐】31款轻量高效的开源JavaScript插件和库
    【微服务那些事】Microservices场景下的持续部署
    前端图像处理指南
    Sed&awk笔记之awk
  • 原文地址:https://www.cnblogs.com/ylllove/p/5815705.html
Copyright © 2020-2023  润新知