设计模式之策略模式

这篇博客深入解析了策略模式的概念,通过旅行的出行方式为例,展示了如何定义策略接口及其具体实现,如自行车、汽车和火车。文章探讨了设计原则,包括分离变化部分和不变部分,以及多用组合少用继承。策略模式的优点在于类间的高内聚和低耦合,以及易于扩展。然而,客户端需要了解所有策略并决定使用哪一种。最后,博主指出策略模式适用于容错恢复机制等场景,例如日志记录策略在数据库和文件之间的切换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 读书笔记之设计模式——策略模式,结合书本和网上的案例和自己的理解来记录一下策略模式

应用案例:1、诸葛亮的锦囊妙计,每一个锦囊就是一个策略。 2、旅行的出游方式,选择骑自行车、坐汽车,每一种旅行方式都是一个策略。 3、JAVA AWT 中的 LayoutManager。

下面将以旅行的出行方式来做说明:

1、首先:我们去旅行,根据路程的远近来选择不同的出游方式,例如,

 出行方式

 骑自行车

坐汽车

坐火车

2、设计原则:将变化的部分和不变的部分分离开。此案例中变得是出行方式

 设计原则:针对接口编程而不是针对实现编程

 设计原则:多用组合,少用继承

现在我们来编写变得出行策略接口,

interface Tripstrategy(){

 void tripMode();//出行方式

}

3、编写出行接口的实现类

public class Bike implements Tripstrategy(){//自行车类,实现出行接口

 public void tripMode( ){

  System.out.println("自行车出行");

}

}

 

public class Car implements Tripstrategy(){//汽车类,实现出行接口

 public void tripMode(){

  System.out.println("坐汽车出行");

}

}

 

public class Train implements Tripstrategy(){//火车类,实现出行接口

 public void tripMode(){

  System.out.println("坐火车出行");

}

}

 

4、编写出行的人类

public class Person{

 private Tripstrategy strategy;

public Person(Tripstrategy strategy){

  this.strategy=strategy;

}

public void executeStrategy(){

 this.strategy.tripMode();

}

public static void main(string[] args){

 Person person=new Person(new Bike());

person.executeStrategy();

} 

}

6、总结:

策略模式的优缺点

优点

  • 策略类之间可以自由切换,由于策略类实现自同一个抽象,所以他们之间可以自由切换

  • 易于扩展,增加一个新的策略对策略模式来说非常容易,基本上可以在不改变原有代码的基础上进行扩展

  • 高内聚低耦合性

缺点

  • 客户端必须知道所有的策略类,并自行决定使用哪一个策略类。

  • 7、策略模式的应用场景:例如容错恢复机制
       容错恢复机制是应用程序开发中非常常见的功能。那么什么是容错恢复呢?简单点说就是:程序运行的时候,

  • 正常情况下应该按照某种方式来做,如果按照某种方式来做发生错误的话,系统并不会崩溃,也不会就此不能继续向下运行了,

  • 而是有容忍出错的能力,不但能容忍程序运行出现错误,还提供出现错误后的备用方案,也就是恢复机制,来代替正常执行的功能,

  • 使程序继续向下运行。

 

  •         举个实际点的例子吧,比如在一个系统中,所有对系统的操作都要有日志记录,而且这个日志还需要有管理界面,这种情况下通常会把日志记录在数据库里面,方便后续的管理,但是在记录日志到数据库的时候,可能会发生错误,比如暂时连不上数据库了,那就先记录在文件里面,然后在合适的时候把文件中的记录再转录到数据库中。
            对于这样的功能的设计,就可以采用策略模式,把日志记录到数据库和日志记录到文件当作两种记录日志的策略,然后在运行期间根据需要进行动态的切换。
            在这个例子的实现中,要示范由上下文来选择具体的策略算法,前面的例子都是由客户端选择好具体的算法,然后设置到上下文中。

  •  

  •  

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值