zoukankan      html  css  js  c++  java
  • 设计模式-策略模式

    策略模式简介

    定义:是一种行为型模式,定义了一系列的算法,并且这些算法以不会客户使用为前提可以在运行时进行更改、替换

    目的:在有多种算法相似的情况下,使用 if...else 所带来的复杂和难以维护

    优点:

    多重条件语句不易维护,而使用策略模式可以避免使用多重条件语句,如 if...else 语句、switch...case 语句

    策略模式提供了一系列的可供重用的算法族,恰当使用继承可以把算法族的公共代码转移到父类里面,从而避免重复的代码

    策略模式可以提供相同行为的不同实现,客户可以根据不同时间或空间要求选择不同的

    策略模式提供了对开闭原则的完美支持,可以在不修改原代码的情况下,灵活增加新算法

    策略模式把算法的使用放到环境类中,而算法的实现移到具体策略类中,实现了二者的分离

    缺点:

    客户端必须理解所有策略算法的区别,以便适时选择恰当的算法类

    策略模式造成很多的策略类,增加维护难度

    实现

    角色:

    抽象策略(Strategy)类:定义了一个公共接口,各种不同的算法以不同的方式实现这个接口,环境角色使用这个接口调用不同的算法,一般使用接口或抽象类实现

    具体策略(Concrete Strategy)类:实现了抽象策略定义的接口,提供具体的算法实现

    环境(Context)类:持有一个策略类的引用,最终给客户端调用

    代码:

     1 /**抽象策略**/
     2 public interface Food {
     3     public void make();
     4 }
     5 
     6 /**具体策略1**/
     7 public class Fry implements Food{
     8 
     9     public void make() {
    10         // TODO Auto-generated method stub
    11         System.out.println("炒是一种以油为主要导热体,将小型原料用中旺火在较短时间内加热成熟、调味成菜的烹饪方式");    
    12     }
    13 
    14 }
    15 
    16 /**具体策略2**/
    17 public class Braise implements Food{
    18 
    19     public void make() {
    20         // TODO Auto-generated method stub
    21         System.out.println("蒸是一种把经过调味后的食品原料放在器皿中,利用水汽使其成熟的烹饪方式");
    22     }
    23 
    24 }
    25 
    26 /**环境**/
    27 public class Kitchen {
    28      private Food food;
    29      
    30      public Kitchen(Food food){
    31         this.food = food;
    32      }
    33      
    34      public void make(){
    35         food.make();
    36      }
    37 }
    38 
    39 /**测试方法**/
    40 public class App {
    41     public static void main( String[] args ){
    42         Kitchen kitchen = new Kitchen(new Fry());
    43         kitchen.make();
    44         System.out.println("--------------------------------------------------");
    45         kitchen = new Kitchen(new Braise());
    46         kitchen.make();
    47     }
    48 }
    49 
    50 测试结果:
    51 炒是一种以油为主要导热体,将小型原料用中旺火在较短时间内加热成熟、调味成菜的烹饪方式
    52 --------------------------------------------------
    53 蒸是一种把经过调味后的食品原料放在器皿中,利用水汽使其成熟的烹饪方式
  • 相关阅读:
    我国自主研发的先进辅助驾驶系统(ADAS)控制器产品实现量产配套
    国务院印发《新一代人工智能发展规划》
    如何删除svn标签
    【转载】DHCP流程
    1-1 如何进行自我规划?
    人要像鹰一样重生、蜕变、成长
    人的一生好像乘坐北京地铁一号线
    【转载】接触Matlab10年后的一个总结,随时使用Matlab要掌握的一些要点
    【转载】BAT 批处理脚本教程
    SNAT 和 DNAT
  • 原文地址:https://www.cnblogs.com/carblack/p/14149665.html
Copyright © 2011-2022 走看看