All About JAVA 关于设计模式中的“策略模式”

本文通过一个人的例子详细解析了策略模式的应用。介绍了如何通过策略模式将经常变化的行为(如吃饭、编程)从主体类中分离出来,形成独立的策略类,从而实现主体类与行为的解耦。

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

“策略模式”遵循了最基本的一条设计原则,将程序中经常需要改变的部分提取出来,使它与程序中不变的部分分离,并且“策略模式”能使设计更具有意义且便于维护。比如:

 

public void eat() { System.out.println("所有都会吃饭"); } public abstract void programming(); // 将开发程序设计为抽象方法}

 

以上的类作为父类存在一些问题:

1. 关于eat方法,每个人吃饭的方式可能会不同,有的人吃中餐,有的人吃西餐等等。这就导致各个子类继承Person类后会重写的eat()方法,并且很有可能在设计时会派生出Chinese或者English等等一系列类,Chinese类的eat()方法实现为吃中餐,English类的eat()方法实现为吃西餐,再分别由Chinese类和English类派生下边的子类,以实现eat()方法的最大限度的重用。 如果像前面那样设计又有问题出现了,对于Chinese类,中国人也可能会使用刀叉吃西餐,但是大多数时间吃中餐。这样听起来好像eat()方法需要在使用过程中不断的被变动。确实,看完下边的问题会给出解决办法。

 

2. 再看看programming()方法,开发程序这个方法,对于看这篇文章的人可能都适合继承此类,但是对于很多非IT人士都是不会开发程序的,所以programming()这个方法放在父类中确实存在问题,它导致了不会programming()的人也继承了programming()方法。

 

“策略模式”可以很好的解决以上问题,根据最基本的一条设计原则,将程序中经常需要改变的部分提取出来,使它与程序中不变的部分分离来看看下边的代码:

 

以上一系列针对Person类的改动和新增的类即为应用了“策略模式”后的结果。针对以上已经设计好的类和接口做一个测试:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值