本文介绍: 策略(Strategy)模式:该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。**策略模式属于对象行为模式,它通过对算法进行封装,把使用算法的责任和算法实现分割开来,并委派给不同的对象把这些算法进行管理。**主要角色:1)抽象策略(Strategy)类:定义了一个公共接口,各种不同的算法以不同的方式实现这个接口,环境角色使用这个接口调用不同的算法,一般使用接口或者抽象类来实现。2)具体策略(Concrete Strategy)类:实现了抽象策略定义
策略设计模式
策略(Strategy)模式:该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式属于对象行为模式,它通过对算法进行封装,把使用算法的责任和算法实现分割开来,并委派给不同的对象把这些算法进行管理。
策略模式提供了对开闭原则的支持
1.结构
主要角色:
1)抽象策略(Strategy)类:定义了一个公共接口,各种不同的算法以不同的方式实现这个接口,环境角色使用这个接口调用不同的算法,一般使用接口或者抽象类来实现。
2)具体策略(Concrete Strategy)类:实现了抽象策略定义的接口,提供具体的算法实现。
3)环境(Context)类:持有一个策略类的引用,最终给客户端使用。
2.案例
- 抽象策略类Strategy
public interface Strategy {
void strategyMethod();
}
public class ConcreteStrategy1 implements Strategy{
@Override
public void strategyMethod() {
System.out.println("调用具体策略类1的策略方法");
}
}
public class ConcreteStrategy2 implements Strategy{
@Override
public void strategyMethod() {
System.out.println("调用具体策略类2的策略方法");
}
}
public class Context {
private Strategy strategy;
public Context(Strategy strategy) {
this.strategy = strategy;
}
public void strategyMethod(){
strategy.strategyMethod();
}
}
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)对象的一部分,但是成员对象可以脱离整体而独立存在。
表示: 使用带空心菱形的实线来表示,菱形指向整体。
学校和老师的聚合关系:
原文地址:https://blog.csdn.net/stormkai/article/details/134771409
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_35614.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。