Strategy

作者: 93张先生 | 来源:发表于2020-09-08 09:21 被阅读0次

策略模式

针对同一任务有多个不同的实现,在运行时,选择一种特定的算法实现。

特征

  • 有多个算法实现
  • 在运行时,针对不同情况,动态选择不同实现

UML

image.png

定义

在策略模式中,我们创建一个有抽象的算法的接口,然后创建这个抽象算法的具体实现,这个叫做策略。
客户端总是调用抽象方法,然后传递给要给上下文对象,这个上下文对象决定使用哪个算法。

场景

我们来设计一个社交应用,它会允许我连接在4个社交平台上的我的朋友们,比如: Facebook、Google Plus、Twitter 、Orkut。现在我想这个 client 能够应该能够告诉我,朋友的名字和所需要的平台。

总的说来,我有一个操作,这个操作可以有多种方式实现(连接我的朋友),在运行时,用户可以选择一个期望的方式。

  • ISocialMediaStrategy 包含抽象操作的接口
  • SocialMediaContext 具体使用哪个具体实现的上下文
  • Implementations 各种各样的 ISocialMediaStrategy 实现,比如 FacebookStrategy、GooglePlusStrategy、TwitterStrategy、TwitterStrategy。

类图

image.png
ISocialMediaStrategy
public interface ISocialMediaStrategy {
    public void connectTo(String friendName);
}
SocialMediaContext
public class SocialMediaContext {
    ISocialMediaStrategy smStrategy;
 
    public void setSocialmediaStrategy(ISocialMediaStrategy smStrategy) 
    {
        this.smStrategy = smStrategy;
    }
 
    public void connect(String name) 
    {
        smStrategy.connectTo(name);
    }
}
FacebookStrategy
public class FacebookStrategy implements ISocialMediaStrategy {
 
    public void connectTo(String friendName) 
    {
        System.out.println("Connecting with " + friendName + " through Facebook");
    }
}
GooglePlusStrategy
public class GooglePlusStrategy implements ISocialMediaStrategy {
 
    public void connectTo(String friendName) 
    {
        System.out.println("Connecting with " + friendName + " through GooglePlus");
    }
}
TwitterStrategy
public class TwitterStrategy implements ISocialMediaStrategy {
 
    public void connectTo(String friendName) 
    {
        System.out.println("Connecting with " + friendName + " through Twitter");
    }
}
OrkutStrategy
public class OrkutStrategy implements ISocialMediaStrategy {
 
    public void connectTo(String friendName) 
    {
        System.out.println("Connecting with " + friendName + " through Orkut [not possible though :)]");
    }
}

Client
public class Demo {
    public static void main(String[] args) {
 
        // Creating social Media Connect Object for connecting with friend by
        // any social media strategy.
        SocialMediaContext context = new SocialMediaContext();
 
        // Setting Facebook strategy.
        context.setSocialmediaStrategy(new FacebookStrategy());
        context.connect("Lokesh");
 
        System.out.println("====================");
 
        // Setting Twitter strategy.
        context.setSocialmediaStrategy(new TwitterStrategy());
        context.connect("Lokesh");
 
        System.out.println("====================");
 
        // Setting GooglePlus strategy.
        context.setSocialmediaStrategy(new GooglePlusStrategy());
        context.connect("Lokesh");
 
        System.out.println("====================");
 
        // Setting Orkut strategy.
        context.setSocialmediaStrategy(new OrkutStrategy());
        context.connect("Lokesh");
    }
}

流行的实现

  • Java Collections.sort(list, comparator) method where client actually passes suitable comparator based on the requirement in runtime to the method and the method is generic to accept any comparator type. Based on the comparator being passed, same collection can be sorted differently.
  • Appenders, Layouts and Filters in Log4j.
  • 在 MyBatis 中, DefaultSqlSession 中使用到了策略模式, DefaultSqlSession 扮演了 Context 的角色,而将所有数据库相关的操作全部封装到 Executor 接口实现中,并通过 executor 字段选择不同的 Executor 实现,比如 BatchExecutor、SimpleExecutor、ReuseExecutor 等。

相关文章

  • 构建机器学习项目1

    Introduction to ML Strategy Why ML Strategy Orthogonaliza...

  • 贴身女秘书

    It is an urban-themed original business strategy strategy...

  • 王者荣耀之「策略者模式」

    目录 什么策略模式(Strategy)1.1 Strategy模式的定义1.2 为什么用Strategy模式,他的...

  • Bernese双差基线选择策略

    Processing strategy: Here you may select the strategy use...

  • Ta Fang Three Kingdoms Strategy

    "Ta Fang Three Kingdoms Strategy" is an epic strategy tow...

  • (GeekBand)C++设计模式 第一周学习笔记

    Strategy模式 今天重点来介绍下Strategy模式。 作为三大经典“组件协作”模式之一的Strategy模...

  • IT与组织

    Strategy真是一个讲不完的概念。周五的案例课上对strategy的解读是“Strategy is who y...

  • 每日十个单词:day27

    1、strategy n. 战略, 策略 ; [经] 战略, 策略 ;eg: The strategy worke...

  • A Strategy

    策略 这本书的第一部分“语境”提出了批判性思维中涉及的基本“工具和规则”。第二部分,“陷阱”解释了思维可能出错的许...

  • Strategy

    策略模式 针对同一任务有多个不同的实现,在运行时,选择一种特定的算法实现。 特征 有多个算法实现 在运行时,针对不...

网友评论

    本文标题:Strategy

    本文链接:https://www.haomeiwen.com/subject/mlsrektx.html