三、策略模式

本文深入探讨了策略模式在软件设计中的应用,对比了if-else和switch-case等传统方法,介绍了如何通过策略模式提高代码的扩展性和灵活性。文章还区分了策略模式与状态模式的不同之处,帮助读者更好地理解和运用这两种模式。

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

       记得在中学时代,每次考完老师评讲试卷,都会说这道题有多少种解法,然后在黑板上板书第一种、第二种解法。其实这个情况就类似于今天的情况,也就是策略模式。他表示的是在遇到一种问题有多种解法的时候,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能。

       策略模式是一种相对来说较简单的模式,但是应用却很广泛。在我们写代码的时候,很容易就会写出比较糟糕的、扩展性差的代码,而策略模式往往是重构的时候会用到的一种方法。策略模式基本上就是多态技术的直接应用,因此比较容易理解。

       我们在写代码的时候很容易写出if else或者switch case这种代码,但是这种代码的扩展性较差,增加一个新功能就得修改很多if else或者switch case。而策略模式就是解决这种问题的有效方法。

class Shape{//多态实现if判断项动态变化
public:
	virtual void doSomething() = 0;
	virtual ~Shape();
};

class Rectangle :public Shape {
public:
	void doSomething() {
		//if判断项抽象为一个子类,算法1
	}
};

class Triangle :public Shape {
public:
	void doSomething() {
		//if判断项抽象为一个子类,算法2
	}
};

class Strategy {//“稳定”的部分抽象出来
public:
	Shape* _shape;
	Strategy() {
		_shape = new Triangle();
		_shape->doSomething();
	}
};

       策略模式本身比较简单,没有太多可以说的,不过策略模式和状态模式非常像,有必要说一下两者的区别:
       策略模式只是条件性的选择方法,只执行一次方法,而状态模式是随着状态的改变不停地更改执行方法。举个例子,就好比我们旅游,对于策略模式我们只需要选择其中一种出行方法就好了,但是状态模式不一样,可能我们到了A地点选择的是火车,到了B地点又选择飞机,根据不同的状态选择不同的出行方式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值