不见不散

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

策略模式:分别封装行为接口,实现算法族,超类里放行为的接口对象,在子类里具体设定行为对象.

我的理解就是:策略模式有一个特点就是要有一个行为族.是一个接口
原则就是:分离变化部分,封装接口,基于接口编程各种功能.

为什么要用策略模式

{

继承带来的问题: (为策略模式)
对类的局部改动,尤其是超类的改动,会影响其它部分,影响会有溢出效应.
溢出效应:
在超类中添加了一个功能(方法),子类直接继承得到了这个方法.

超类里面挖的一个坑,每一个子类都要来填,增加工作量,复杂度是N的平方,

}

什么情况下用策略模式?

我的理解:在有很多种形为或功能的情况下.而其每一种形为或功能在不同时候表现不一样.也就是说当听到什么什么同进,表现也就不一样了.

比如说:鱼可以游,但是有的鱼是慢慢游,有的鱼游得一般,有的鱼游得很快.所以就可以定义一个接口ISwim,然后就在用SlowSwim,GeneralSwim,QuickSwim三个类分别去实现这个ISwim接口.SlowSwim,GeneralSwim,QuickSwim这三个类就叫行为族.

怎样用这个策略模式?

还是按照上面的鱼来说,定义一个抽象的Fish类,Fish里面有一个ISwim字段,通过构造方法传入.

现在有假设有一条鲸鱼是快游

public class  Whale extends Fish{
{
    private ISwim swim;

    whale(ISwim swim){
        this.swim=swim;
    }

    public void swim (){
        swim.swim();
    }
    public void static main(String[] arg){
        //鲸鱼是很游得很快的所以传入ISwim的子类QuictSwim
        Whale whale= new Whale(new QuictSwim());
        whale.swim();
    }
}

策略模式的优点?

1,当我们要添加一个行为(方法)的时候可以不用去改源码,直接添加一个类就可以了.

2,我们把所有行为族定义好之后,就要以自己的进行行为之间组合.

策略模式的缺点?

1,客户端必须知道所有的策略类也就是行为族,并自行决定使用哪一个策略类。这就意味着客户端必须理解这些算法的区别,以便适时选择恰当的算法类。换言之,策略模式只适用于客户端知道所有的算法或行为的情况。

2,行为族很多类很多.

posted on 2016-03-03 18:27  不见不散789  阅读(188)  评论(1编辑  收藏  举报