策略模式学习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(){}

}

}

策略模式:

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

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

时间: 2024-08-23 23:03:10

策略模式学习2---原理的相关文章

策略模式 -- 学习HeadFirst设计模式记录

策略模式:定义了算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户. 将算法族从对象中独立出来,然后在对象中通过组合的方式,定义算法对象,再委托该对象处理算法. 单一原则:封装变化: 多用组合,少用继承: 针对接口编程,不针对实现编程:

策略模式学习

将算法的定义和使用分离,这就是策略模式所要解决的问题. 策略模式的主要目的是将算法的定义与使用分开,也就是将算法的行为和环境分开. 如在Discount类中,该类为具体的算法类,该类只有算法的行为,也就是计算价格的行为.而在环境类中,环境类定义了算法使用的环境. 策略模式提供了一种可以替换继承关系的办法.算法的使用和算法本身混在一起,不符合“单一职责原则”,如果决定使用哪一种算法的逻辑和该算法本身混合在一起,就不可能再独立演化:而且使用继承无法实现算法或行为在程序运行时的动态切换. 策略模式适用

策略模式学习笔记

策略模式定义:将可变的部分从程序中抽象分离成算法接口,在该接口下分别封装一系列算法实现,并使它们可以相互替换,从而导致客户端程序独立于算法的改变. 策略模式区别于模板方法模式: - 策略模式强调整体算法,即将整个算法交由用户实现.(采用组合方式) - 模板方法模式强调部分算法,即整体算法不变情况下,部分子算法实现交由用户实现.(采用继承方式) 设计原则: - 找出不变部分抽象成接口(鸭子鸣叫行为),找出变化部分使用具体实现.(鸭子不叫,鸭子嘎嘎叫,鸭子唧唧叫) - 面向接口编程,而不是面向实现编

接口、抽象类应用之策略模式学习

接口应用之策略模式 策略模式(Strategy Pattern),定义了一系列算法,将每一种算法封装起来并可以相互替换使用,策略模式让算法独立于它的客户应用而独立变化. OO设计原则 面向接口编程(面向抽象编程) 封装变化 多用组合,少用继承 // 测试类(包含main方法) public class StrategyPattern { public static void main(String[] args) { BaseService userService = new UserServi

策略模式学习三---总结

1:分析项目的改变的部分与不变的部分. 2:多用组合少用继承,用行为类组合而不是用行为的继承: 继承虽然能复用代码,但是把其的子类的代码也影响了 3:设计模式有没有库?有些库和框架就是直接使用的某种设计模式建立的: 设计模式可以应用在我们自己的项目中.只要你认真的分析自己的项目就可以找到一种合适的设计模式来解决你所遇到的问题:

JavaScript设计模式之策略模式(学习笔记)

在网上搜索“为什么MVC不是一种设计模式呢?”其中有解答:MVC其实是三个经典设计模式的演变:观察者模式(Observer).策略模式(Strategy).组合模式(Composite).所以我今天选择学习策略模式. 策略模式:定义了一系列家族算法,并对每一种算法单独封装起来,让算法之间可以相互替换,独立于使用算法的客户. 通常我并不会记得“牛顿第一定律”的具体内容,所以我也难保证我会对这个定义记得多久……用FE经常见到的东西来举个例子说明一下: $("div").animation(

设计模式(十三)策略模式(Strategy)-行为型

前两天去张家界玩了,一直荒废了学习,持续两天都没在状态,今天好好恢复下.发篇博文吧! 策略模式(Strategy) 策略模式就是定义了一系列的算法,并将每一个算法封装起来,而且使他们还可以互相替换.策略模式让算法独立于使用它的客户而独立变化. 策略模式就是提供相同的接口,软件开发人员可以根据相应的接口实现不同的策略.然后根据不同的情况选择不同的策略,从而实现客户端代码不用修改,只需要替换不同的策略实现类即可. 策略模式的实现原理 策略模式实现原理 采用策略模式,减少条件语句的输出. 实现 抽象策

学习大话设计模式02_工厂模式 进阶至 策略模式

1 /** 2 * 现金收费抽象类 3 * @author Monica 4 * 5 */ 6 public abstract class CashSuper { 7 /** 8 * 现金收取超类的抽象方法 9 * @param money 收取现金,参数为原价 10 * @return 返回当前价 11 */ 12 public abstract double acceptCash(double money); 13 } 14 15 /** 16 * 正常收费子类 17 * @author M

编程学习之简单工厂模式与策略模式

很久之前在学习c++的时候就听到老师说写代码要考虑重构,架构,在此期间学习到了一种简单工厂模式. 何为简单工厂模式呢?简单工厂模式又叫静态工厂方法模式(Static FactoryMethod Pattern),是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类. 举个栗子,我们可能会遇到这类问题,假如需要一个软件,它可以计算各种图形的面积,使用简单工厂模式来构架的话就是通过创建一个工厂类,而程序运行过程中这些实例化这些具体的计算面积的算法类,然后主程序通过调用这些实例