23种设计模式之策略模式(strategy)

极简 极简     2022-08-27     650

关键词:

策略模式是一种对象的行为型模式,定义一系列算法,并将每一个算法封装起来,并让它们可以相互替换。策略模式比算法独立于使用它的客户而变化,其目的是将行为和环境分隔,当出现新的行为时,只需要实现新的策略类。

优点:

1)另一种子类化方法。

2)在类自身中定义了每一个行为,这样就减少了条件语句。

3)更容易扩展模型。在不对应用程序进行代码修改的情况下,使该模式具有新的行为。

使用场景:

1)许多相关类只是在行为方面有所区别。

2)许多算法的不同变体。

3)算法使用客户端未知的数据。

Strategy 模式

public class Hand  
{  
    public const int HANDVALUE_GUU = 0;//石头  
    public const int HANDVALUE_CHO = 1;//剪刀  
    public const int HANDVALUE_PAA = 2;//
  
    private int handvalue;  
    private Hand(int handvalue)  
    {  
        this.handvalue = handvalue;  
    }  
  
    public static Hand[] hands =   
    {   
        new Hand(HANDVALUE_GUU),   
        new Hand(HANDVALUE_CHO),   
        new Hand(HANDVALUE_PAA)   
    };  
  
    /// <summary>  
    /// 从值获得对象实例  
     /// </summary>  
    /// <param name="handvalue"></param>  
    /// <returns></returns>  
    public static Hand GetHand(int handvalue)  
    {  
        return hands[handvalue];  
    }  
}  
public interface Strategy  
{  
    Hand NextHand();  
} 
public class WinningStrategy : Strategy  
{  
    private bool won = false;  
    private Hand prevHand;  
    private Random random = new Random();  
  
    public Hand NextHand()  
    {  
        if (!won)  
        {  
            prevHand = Hand.GetHand(random.Next(3));  
        }  
        Console.WriteLine("调用了WinningStrategy策略");  
        return prevHand;  
    }  
}  
public class ProbStrategy : Strategy  
{  
    public Hand NextHand()  
    {  
        int handvalue = 0;  
        //省略具体实现  
  
        Console.WriteLine("调用了ProbStrategy策略");  
        return Hand.GetHand(handvalue);  
    }  
}  
public class Player  
{  
    private string name;  
    private Strategy strategy;  
    public Player(string name, Strategy strategy)  
    {  
        this.name = name;  
        this.strategy = strategy;  
    }  
  
    /// <summary>  
    /// 向战略请示手势  
    /// </summary>  
    /// <returns></returns>  
    public Hand NextHand()  
    {  
        return strategy.NextHand();  
    }  
}  
class Program  
{  
    static void Main(string[] args)  
    {  
       //策略模式  
        while (true)  
        {  
            Console.WriteLine("/r/n请选择:1、WinningStrategy策略游戏;2、ProbStrategy策略游戏...");  
            string line = Console.ReadLine();  
            if (line.Equals("1"))  
            {  
                Strategy.Strategy strategy = new WinningStrategy();  
                Player player = new Player("abc", strategy);  
                player.NextHand();  
            }  
            else if (line.Equals("2"))  
            {  
                Strategy.Strategy strategy = new ProbStrategy();  
                Player player = new Player("abc", strategy);  
                player.NextHand();  
            }  
        }  
    }  
}  

 

设计模式之——浅谈strategy模式(策略模式)

strategy模式,即策略模式。个人觉得吧,策略模式更多的是一种思维方式。首先我们要知道,为什么需要策略模式。举个例子,比如用程序输出今天下午去玩什么。PlayGame玩游戏packagesite.wangxin520.gof.strategy.demo;/***玩游戏的类*@author... 查看详情

设计模式之策略模式(代码片段)

策略模式就是提供一组固定算法的策略,客户根据自己的需求选择其中一种策略进行执行。特点:预先明确的一组固定算法策略客户需要选择其中一种策略场景:网络爬虫,针对不同的网站,预先提供不同的解析算法网站预先提... 查看详情

gof23种设计模式之策略模式和责任链模式

查看详情

23种设计模式之——策略模式

什么是策略模式?它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。什么时候去使用策略模式?策略模式就是用来封装算法的,但是在实践中,我们发现可以用它... 查看详情

23种设计模式之二(策略模式)

策略模式:(分别封装行为接口,实现算法族,超类里放行为接口对象,在子类里具体设定行为对象)原则:  分离变化部分,封装接口,基于接口编程各种功能。此模式让行为算法的变化独立于算法的使用者。   举例... 查看详情

23种设计模式之策略模式

一、什么是策略模式  策略这个词应该怎么理解,打个比方说,我们出门的时候会选择不同的出行方式,比如骑自行车、坐公交、坐火车、坐飞机、坐火箭等等,这些出行方式,每一种都是一个策略。  再比如我们去逛商场... 查看详情

gof之策略模式(strategy)

定义  定义一组算法,并封装每个算法,让它们可以彼此交换使用。策略模式让这些算法在客户端使用它们能更加独立    在策略模式中,这些不同的计算方式就是所谓的算法,而这些算法中的每一个都应该独立出来,将... 查看详情

23种设计模式之策略设计模式

策略模式:分别封装行为接口,实现算法组,超类里放行为接口对象,在子类里具体设定行为对象。原则就是:分离变化部分,封装接口,基于接口编程各种功能。此模式让行为算法的变化独立于算法的使用者。策略模式注意点... 查看详情

java设计模式之策略模式

...此模式让算法的变化,不会影响到使用算法的客户(大话设计模式)。策略模式UML图      策略模式代码   古代的各种计谋都是一种策略,这次我们的例子就拿其中一种离间计来写的,理解起来非常容易,代码... 查看详情

设计模式之策略者设计模式

packagenet.dp.strategy;importnet.dp.strategy.fly.FlyBehavior;importnet.dp.strategy.quack.QuackBehavior;/***策略者模式鸭子父类*@authorAdministrator**/publicabstractclassDuck{ //鸭子有可能具备飞行行为和叫喊行为但是具体的行为不知道所以父类中使用 查看详情

设计模式之策略模式(代码片段)

  今天我们要介绍的设计模式叫做策略模式。策略模式其实就是把不同的策略(方法)封装在不同的类中。在策略模式(StrategyPattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式(... 查看详情

23种设计模式——策略模式组件协作(代码片段)

文章目录意图什么时候使用策略真实世界类比策略模式的实现策略模式的优缺点亦称:Strategy意图定义了一组策略,分别在不同类中封装起来,每种策略都可以根据当前场景相互替换,从而使策略的变化可以独立... 查看详情

设计模式

23种设计模式之——单例模式23种设计模式之——策略模式23种设计模式之——工厂方法模式23种设计模式之——抽象工厂模式23种设计模式之——代理模式23种设计模式之——抽象工厂模式 查看详情

设计模式之策略模式

策略模式是一种定义一系列算法的方法,从概念上说,所有这些方法完成的都是一样的工作,只是完成的方式(或者说是实现不同)不同。它可以一种相同的方式来调用所有的算法,减少了各种算法类与使用算法的类之间的耦合... 查看详情

行为型模式之策略模式

概述在策略模式中,我们可以定义一些独立的类来封装不同的算法,每一个类封装一种具体的算法,在这里,每一个封装算法的类我们都可以称之为一种策略(Strategy),为了保证这些策略在使用时具有一致性,一般会提供一个抽... 查看详情

设计模式之策略模式

1、定义  策略模式属于对象的行为模式。其用意是针对一组算法,将每一组算法封装到具有共同接口的独立子类中,从而可以使得他们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。2、策略模式... 查看详情

设计模式之策略模式(strategy)详解及代码示例(代码片段)

一、策略模式的定义  策略(Strategy)模式的定义:该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式属于对象行为模式,它通过对算法进行封装,把... 查看详情

大话设计模式之策略模式

策略模式  定义了一系列的算法,分别封装起来,让他们之间可以互相替换。此模式让算法的改变不会影响到使用算法的客户。  在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的context对... 查看详情