java设计模式1-策略模式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java设计模式1-策略模式相关的知识,希望对你有一定的参考价值。

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

为什么要用策略模式

{

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

超类里面挖的一个坑,每一个子类都要来填,增加工作量,复杂度是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,行为族很多类很多.

以上是关于java设计模式1-策略模式的主要内容,如果未能解决你的问题,请参考以下文章

java设计模式之策略模式

java策略模式和代理模式有啥区别?

Java 设计模式学习笔记1——策略模式(Duck例子)

java策略模式与接口直接实现

Java设计模式----------策略模式

策略模式—Java实现(转)