设计模式--策略模式

简介

定义一组算法,将每个算法都封装起来,并且使他们相互转换。
意图: 定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。
解决问题: 在有多种算法相似的情况下,使用 if…else 所带来的复杂和难以维护(简而言之消除if分支过多问题)
指导思想:开闭原则、迪米特法则、依赖倒置原则

策略模式结构图如下:
在这里插入图片描述

角色

通过上述结构图可以看出策略模式包含的角色:
环境类(Context):用来操作策略的上下文环境,起承上启下作用,屏蔽高层模块对策略,算法的直接访问。是策略模式的重点,它借用了代理模式的思路,和代理模式的区别就是封装角色和被封装的策略类不是同一个接口。
抽象策略类(Strategy):策略的抽象,通常为接口或者是抽象类,定义每个策略或者是算法必须具有的属性和方法。
具体策略类(ConcreteStrategy):具体的策略实现,包含具体的算法。

简单实现

1.定义抽象策略类(Strategy)

public interface Strategy {
    void doSomething();
}

2.定义两个具体策略类(ConcreteStrategy)分别实现抽象策略。

public class ConcreteStrategyA implements Strategy {
    @Override
    public void doSomething() {
        System.out.println("A do something....");
    }
}

public class ConcreteStrategyB implements Strategy{
    @Override
    public void doSomething() {
        System.out.println("B do something ...");
    }
}

3.定义环境上下文。

public class Context {

    private Strategy strategy;

    public Context(Strategy strategy) {
        this.strategy = strategy;
    }

    public void exec(){
        this.strategy.doSomething();
    }
}

4.Client(Main验证)

public class StrategyMain {
    public static void main(String[] args) {
        Strategy A = new ConcreteStrategyA();
        Context contextA = new Context(A);
        contextA.exec();

        Strategy B = new ConcreteStrategyB();
        Context contextB = new Context(B);
        contextB.exec();
    }
}

在这里插入图片描述

优缺点

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值