设计模式之策略模式


开门见山,不讲枯燥的定义了。

先放上一张简化类图:

其实策略模式很好理解,由三部分组成:一个策略(策略接口及其实现类),一个策略容器(通过注入策略接口对象实现对策略实现类的调用),一个使用策略的用户。

如图,右边是一个抽象接口Strategy,以及两个具体的实现类ConcreteStrategyA和ConcreteStrategyB;左边是一个context容器,有一个Strategy类型的属性;最后就是一个调用者。

下面我贴段代码,大家自己体会下。

第一部分:

IStrategy接口:

package _1st_Strategy;

public interface IStrategy {
	void win();
}

以及两个实现类:

package _1st_Strategy;

public class Backhand implements IStrategy {

	@Override
	public void win() {
		System.out.println("反拍下切急坠得分");
	}

}

package _1st_Strategy;

public class Forehand implements IStrategy {

	@Override
	public void win() {
		System.out.println("正拍穿越得分");
	}

}

第二部分:容器Mind类。

package _1st_Strategy;

public class Mind {
	//注入IStrategy对象,可以调用具体实现的策略。
	private IStrategy strategy = null;

	Mind(IStrategy strategy) {
		this.strategy = strategy;
	}

	public void win() {
		this.strategy.win();
	}
}

第三部分:用户类,调用“策略”测试。
package _1st_Strategy;

public class TennisPlayer {
	public static void main(String[] args) {
		Mind mymind = new Mind(new Forehand());
		mymind.win();//输出“正拍穿越得分”
		mymind = new Mind(new Backhand());
		mymind.win();//输出“反拍下切急坠得分”
	}
}

最后总结下,策略模式的关键就是“策略接口对象注入容器类”。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值