zoukankan      html  css  js  c++  java
  • 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_000.JAVA语言课堂测试试卷01
    2018暑假第八周总结&暑假代码成果总结(8.27-9.2)
    C#_最基础的计算器
    Java_学生信息管理系统——数组版——初次编写
    Java_计算器001,支持加减乘除,括号,小数点,√,^ 运算
    Java_计算器001,支持加减乘除,括号运算
    2018暑假第七周总结(8.20-8.26)
    2018暑假第六周总结(8.13-8.19)
    2018暑假第五周总结(8.6-8.12)
    poj 1984(带权并查集)
  • 原文地址:https://www.cnblogs.com/yinyu/p/5239641.html
Copyright © 2011-2022 走看看