• 设计模式之策略模式(一对象行为型)


    1.什么是策略模式。

      策略模式是将可变部分从程序中抽象分离成算法接口,在该接口下分别封装一系列算法实现。使得客户端程序独立于算法的改变,而不会出现变动。体现了高内聚和低耦合的特性。

      缺点:客户端必须知道和理解所有的策咯,违反最少知识原则的,可以利用享元模式减少对象的数量。

      特点:把不变的部分抽象为接口,将变化的部分归结为实现。

    2.策略模式应用场景举例。

      文档——布局算法——(布局算法1,布局算法2,布局算法3,……)

      支付——支付算法——(招商银行,建设银行,工商银行,……)

      旅游——交通工具——(汽车,火车,飞机,轮船,……)

      ……

    3.策略模式的使用举例。

      三国有一章,周郎妙计安天下,赔了夫人又折兵。这里讲述了,赵云怀揣着诸葛亮的三条锦囊妙计,来到吴国,最后,在诸葛亮安排下,黄忠与魏延救援下,刘备最终娶回吴国公主的故事。这里可以使用到策略模式,抽象为如下类图:

    解释如下:定义一个妙计的接口类,可以用来实现各种各样的计策。定义一个存放计策的抽象锦囊类SmartExpress,用于陈放各种计策。有一个秘密的类继承自锦囊类,为赵云使用的,有一个明显计谋类,继承自锦囊类,为黄忠与魏延等使用。

    核心代码:

    IIdearStrategy接口:
    /**
    * @FileName IIdearStrategy.java
    * @Package com.ali.pattern.strategy.idears
    * @Description
    * <p>策略模式:各种策略的抽象接口</p>
    * @Author ali blog:http://www.cnblogs.com/accipiter
    * @Date 2016年1月18日下午8:29:56
    * @Version V1.0.1
    */
    package com.ali.pattern.strategy.idears;
    
    /**
    * @ClassName IIdearStrategy
    * @Description TODO
    * @Date 下午8:32:05
    */
    public interface IIdearStrategy{
        public void oprate();
    }
    SmartExpress 类:
    /**
    * @FileName SmartExpress.java
    * @Package com.ali.pattern.strategy.idears
    * @Description 
    *<p>周郎妙计安天下,赔了夫人又折兵</p>
    * @Author ali blog:http://www.cnblogs.com/accipiter
    * @Date 2016年1月18日下午8:49:01
    * @Version V1.0.1
    */
    package com.ali.pattern.strategy.idears;
    
    /**
     * @ClassName SmartExpress
     * @Description 
     * <p>锦囊类用以装妙计</p>
     * @Date 下午8:49:01
     */
    public abstract class SmartExpress {
    
        private IIdearStrategy idearStrategy;
        /**
        * @Title SmartExpress
        * @Description 
        * <p>构造函数用以决定使用那个妙计</p>
        * @param idearStrategy
         */
        public void  setSmartExpress(IIdearStrategy idearStrategy){
            this.idearStrategy=idearStrategy;
        }
        /**
        * @Title operate
        * @Description
        * <p>使用计谋</p> 
        * @Return void
        * @Throws 
        * @user Administrator
        * @Date 2016年1月18日
         */
        public void operate(){
            this.idearStrategy.oprate();
        }
    }

    =============================华丽分割线=======================================

    如果有需要全套代码的可以与我联系。

     
  • 相关阅读:
    LeetCode 101. 对称二叉树
    PTA 两个有序序列的中位数(25分)
    CF1567
    亚线性筛
    LowbitMatrix(线段树)
    Matrix(组合数学)
    [模版] 数论基础模版
    Gym102001
    Gym102483A
    [模版] Miller-Rabin素性测试&Pollard-Rho分解质因数
  • 原文地址:https://www.cnblogs.com/accipiter/p/5140760.html
Copyright © 2020-2023  润新知