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

    定义

    定义了不同的算法族,并且之间可以互相替换,此模式让算法的变化独立于使用算法的客户。也就是将算法独立成类,在调用的时候动态的创建对应的类,调用其方法,从而使方法实现相对独立,再实现抽象成接口面向接口编程。

    举例类图

    代码实现

     1     public class Context
     2     {
     3         ITravelStategy travelStategy = null;
     4         public Context(ITravelStategy sortStategy)
     5         {
     6             this.travelStategy = sortStategy;
     7         }
     8         public void Travel()
     9         {
    10             travelStategy.Travel();
    11         }
    12     }
    13     public interface ITravelStategy
    14     {
    15         void Travel();
    16     }
    17     
    18     public class SelfTravel : ITravelStategy 
    19     {
    20 
    21         public void Travel()
    22         {
    23             Console.WriteLine("自助游");
    24         }
    25     }
    26     public class TourTravel : ITravelStategy 
    27     {
    28 
    29         public void Travel()
    30         {
    31             Console.WriteLine("跟团游");
    32         }
    33     }
    34     public class Rest : ITravelStategy 
    35     {
    36 
    37         public void Travel ()
    38         {
    39             Console.WriteLine("在家休息");
    40         }
    41     }

    总结

    策略模式将算法独立成对象,在调用时动态的创建。有时候会想到动态的创建,那是不是我要创建一个工厂模式根据需要制定创建的对象?这个可以有,但是这一步已经是创建的步骤了。策略模式关注的是对行为算法的封装与调用,工厂模式则是对对象的创建,这是有区别的。

    当然对于策略模式将算法抽象成类,那我们是否可以直接调用创建的方法而不去创建类呢,这个也是可以的。用委托来实现,将对策略方法的调用实现成委托方法的触发,甚至写成匿名方法都是可取的,这更多的是看设计中算法使用的频次。多次多处使用,则封装成类。单次调用使用匿名方法是不错的选择。

    Top
    收藏
    关注
    评论
  • 相关阅读:
    2060: [Usaco2010 Nov]Visiting Cows 拜访奶牛
    2020: [Usaco2010 Jan]Buying Feed, II
    3396: [Usaco2009 Jan]Total flow 水流
    3403: [Usaco2009 Open]Cow Line 直线上的牛
    2102: [Usaco2010 Dec]The Trough Game
    最小生成树——Kruskal算法
    最短路径——Floyd算法(含证明)
    最短路径——Bellman-Ford算法以及SPFA算法
    最短路径——Dijkstra算法以及二叉堆优化(含证明)
    普通并查集
  • 原文地址:https://www.cnblogs.com/Joy-et/p/4847577.html
Copyright © 2011-2022 走看看