二十三种设计模式之策略模式

简介: 二十三种设计模式之策略模式

[TOC]

二十三种设计模式之策略模式

1、关于策略模式

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

image-20220617165829821

环境类(Context):用一个ConcreteStrategy对象来配置。维护一个对Strategy对象的引用。可定义一个接口来让Strategy访问它的数据。
抽象策略类(Strategy):定义所有支持的算法的公共接口。 Context使用这个接口来调用某ConcreteStrategy定义的算法。
具体策略类(ConcreteStrategy):以Strategy接口实现某具体算法。

2、具体实现

2.1、公共接口部分

public interface PackageStrategy {
    
    //定义所有支持的算法的公共接口
    
    public void operatePackage();

}

2.2、具体算法实现部分

2.2.1、FirstImpl.java

public class FirstImpl implements PackageStrategy {

    @Override
    public void operatePackage() {
        System.out.println("==================  执行了第First个方法   ==================");
    }

}

2.2.2、SecondImpl.java

public class SecondImpl implements PackageStrategy {

    @Override
    public void operatePackage() {
        System.out.println("==================  执行了第Second个方法   ==================");
    }

}

2.2.3、ThirdImpl.java

public class ThirdImpl implements PackageStrategy {
    
    @Override
    public void operatePackage() {
        System.out.println("==================  执行了第Third个方法   ==================");
    }
    
}

2.3、环境部分设计

import com.nanjustar.strategy.service.PackageStrategy;
public class PackageStrategyContext {

    private PackageStrategy packageStrategy;

    public PackageStrategyContext(PackageStrategy packageStrategy) {
        this.packageStrategy = packageStrategy;
    }


    public void doPackageStrategy(){
        packageStrategy.operatePackage();
    }
}

2.4、输出信息

    public void strategy() {
        PackageStrategyContext packageStrategyContext;

        packageStrategyContext = new PackageStrategyContext(new FirstImpl());
        packageStrategyContext.doPackageStrategy();

        packageStrategyContext = new PackageStrategyContext(new SecondImpl());
        packageStrategyContext.doPackageStrategy();


        packageStrategyContext = new PackageStrategyContext(new ThirdImpl());
        packageStrategyContext.doPackageStrategy();
    }
==================  执行了第First个方法   ==================
==================  执行了第Second个方法   ==================
==================  执行了第Third个方法   ==================
目录
相关文章
|
6天前
|
设计模式 算法
设计模式之 Strategy(策略模式)
设计模式之 Strategy(策略模式)
25 1
|
6天前
|
设计模式 算法 PHP
php设计模式--策略模式(六)
php设计模式--策略模式(六)
13 0
|
6天前
|
设计模式 算法 搜索推荐
设计模式之策略模式
设计模式之策略模式
46 0
|
6天前
|
设计模式 算法 Java
行为型设计模式-策略模式(Strategy Pattern)
行为型设计模式-策略模式(Strategy Pattern)
|
4天前
|
设计模式 算法 Java
Java一分钟之-设计模式:策略模式与模板方法
【5月更文挑战第17天】本文介绍了策略模式和模板方法模式,两种行为设计模式用于处理算法变化和代码复用。策略模式封装不同算法,允许客户独立于具体策略进行选择,但需注意选择复杂度和过度设计。模板方法模式定义算法骨架,延迟部分步骤给子类实现,但过度抽象或滥用继承可能导致问题。代码示例展示了两种模式的应用。根据场景选择合适模式,以保持代码清晰和可维护。
10 1
|
6天前
|
设计模式 算法 Java
小谈设计模式(3)—策略模式
小谈设计模式(3)—策略模式
|
6天前
|
设计模式 算法
【设计模式】阿里终面:你觉得这个例子是策略模式吗?
【设计模式】阿里终面:你觉得这个例子是策略模式吗?
9 1
|
6天前
|
设计模式 算法
大话设计模式(2)——策略模式
大话设计模式(2)——策略模式
8 1
|
6天前
|
设计模式 JavaScript 算法
js设计模式-策略模式与代理模式的应用
策略模式和代理模式是JavaScript常用设计模式。策略模式通过封装一系列算法,使它们可互换,让算法独立于客户端,提供灵活的选择。例如,定义不同计算策略并用Context类执行。代理模式则为对象提供代理以控制访问,常用于延迟加载或权限控制。如创建RealSubject和Proxy类,Proxy在调用RealSubject方法前可执行额外操作。这两种模式在复杂业务逻辑中发挥重要作用,根据需求选择合适模式解决问题。
|
6天前
|
设计模式 算法 Java
Java 设计模式:探索策略模式的概念和实战应用
【4月更文挑战第27天】策略模式是一种行为设计模式,它允许在运行时选择算法的行为。在 Java 中,策略模式通过定义一系列的算法,并将每一个算法封装起来,并使它们可以互换,这样算法的变化不会影响到使用算法的客户。
23 1