摘要:简介策略模式是设计模式中常见的一种行为型模式,它定义一系列算法,把它们封装起来,并且可以相互替换,让这些算法独立于使用它们的调用者。
1. 简介
策略模式(Strategy)是设计模式中常见的一种行为型模式,它定义一系列算法,把它们封装起来,并且可以相互替换,让这些算法独立于使用它们的调用者。也就是把变化封装起来,面向接口编程而不是面向实现编程,体现了多用组合,少用继承的设计原则。
2. UML类图Context类持有IStrategy的引用,IStrategy是一个抽象策略,为其它具体策略提供需要实现的方法。ConcreteStrategyA, ConcreteStrategyB, ConcreteStrategyC是具体的策略,封装了不同的算法,可以相互替换。
3. 实例假如你要出去旅行,那么出行的交通方式会有很多种选择,根据需要的时间、费用、舒适度可以选择不同的交通工具,相当于有多种策略可以选择。
Context类:
public class Person{ private TravelStrategy strategy; public void setTravelStrategy(TravelStrategy strategy) { this.strategy = strategy; } public void travel() { strategy.travel(); } }
抽象策略:
public interface TravelStrategy { void travel(); }
具体策略:
public class Train implements TravelStrategy { public void travel() { System.out.println("火车价格便宜,时间稍长"); } } public class Airplane implements TravelStrategy { public void travel() { System.out.println("飞机价格昂贵,时间短"); } } public class Bus implements TravelStrategy { public void travel() { System.out.println("大巴价格便宜,时间长,舒适度低"); } }
测试:
public class Test { public static void main(String[] args) { Person person = new Person(); //选择飞机 person.setTravelStrategy(new Airplane()); person.travel(); //选择火车 person.setTravelStrategy(new Train()); person.travel(); } }
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/71567.html
摘要:可以使用其他模式来修正这个缺陷,如工厂方法模式代理模式或享元模式。我们的策略模式只是实现了策略的管理,但是没有严格地定义适当的场景使用适当的策略,在实际项目中,一般通过工厂方法模式来实现策略类的声明。源码地址参考文献设计模式之禅 定义 Define a family of algorithms,encapsulate each one,and make them interchange...
摘要:一定义定义维基百科策略模式作爲一種軟件設計模式,指對象有某個行爲,但是在不同的場景中,該行爲有不同的實現算法。二策略模式图我们看看策略模式是有怎样设计结构的。如中创建线程池,线程池任务满时,对提交的任务做处理就使用了策略模式。以前完整的看过《大话设计模式》,虽然完整看过,也做过笔记,但现在依然很多已经很模糊。这段时间趁着离职,有时间,打算重新过一遍,该篇将介绍策略模式。一、定义定义(维基百科...
摘要:孙膑心里一万个草泥马在奔腾,差点没噎死自己滚一边去,我们这盘跟他赛马开始,策略模式上场。在设计模式之禅中的提出通过策略枚举和反射机制对策略模式进行改良,膜拜了但是要添加或淘汰策略,还是得去对枚举进行修改,也不符合开闭原则。 今天给大家说说田忌赛马的故事。如有雷同,纯属巧合!话说在战国时期,群雄割据,硝烟四起,茶余饭后还是少不了娱乐活动的,其中赛马是最火爆的。一天,孙膑看到田忌像个死鸡似...
阅读 1196·2023-04-25 17:05
阅读 3018·2021-11-19 09:40
阅读 3571·2021-11-18 10:02
阅读 1746·2021-09-23 11:45
阅读 3027·2021-08-20 09:36
阅读 2788·2021-08-13 15:07
阅读 1140·2019-08-30 15:55
阅读 2471·2019-08-30 14:11