策略设计模式

策略设计模式

策略(Strategy)模式:该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式属于对象行为模式,它通过对算法进行封装,把使用算法的责任和算法实现分割开来,并委派给不同的对象把这些算法进行管理。
策略模式提供了对开闭原则的支持

1.结构

主要角色:
1)抽象策略(Strategy)类:定义了一个公共接口,各种不同的算法以不同的方式实现这个接口,环境角色使用这个接口调用不同的算法,一般使用接口或者抽象类来实现。
2)具体策略(Concrete Strategy)类:实现了抽象策略定义的接口,提供具体的算法实现。
3)环境(Context)类:持有一个策略类的引用,最终给客户端使用。

2.案例

在这里插入图片描述

  • 抽象策略类Strategy
public interface Strategy {

    void strategyMethod();
}
  • 具体策略类1ConcreteStrategy1
public class ConcreteStrategy1 implements Strategy{
    @Override
    public void strategyMethod() {
        System.out.println("调用具体策略类1的策略方法");
    }
}
  • 具体策略类2ConcreteStrategy2
public class ConcreteStrategy2 implements Strategy{
    @Override
    public void strategyMethod() {
        System.out.println("调用具体策略类2的策略方法");
    }
}
  • 环境类Context
public class Context {
    private Strategy strategy;

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

    public void strategyMethod(){
        strategy.strategyMethod();
    }
}
  • 客户端测试类StrategyPatternClient
public class StrategyPatternClient {
    public static void main(String[] args) {
        Strategy strategy1 = new ConcreteStrategy1();
        Context context = new Context(strategy1);
        context.strategyMethod();
        System.out.println("------------------");
        Strategy strategy2 = new ConcreteStrategy2();
        Context context2 = new Context(strategy2);
        context2.strategyMethod();
    }
}

测试结果:

调用具体策略类1的策略方法
------------------
调用具体策略类2的策略方法

3.聚合关系介绍

聚合(Aggregation)关系是关联关系的一种,是强关联关系,是整体和部分之间的关系,是has-a的关系。成员对象(Strategy)是整体(Context)对象的一部分,但是成员对象可以脱离整体而独立存在。
表示: 使用带空心菱形的实线来表示,菱形指向整体。

学校和老师的聚合关系:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值