设计模式-策略模式

本文深入解析了设计模式中的策略模式,介绍了其三个核心角色:Context封装角色、Strategy抽象策略角色和ConcreteStrategy具体策略模式。通过实例代码展示了策略模式如何利用面向对象的继承和多态特性,实现算法或策略的选择和封装。

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

设计模式-策略模式

策略模式使用的就是面向对象的继承和多态机制,非常容易理解,策略模式的三个角色分别为:

Context封装角色

它也叫上下文角色,起承上启下的封装作用,屏蔽高层模块或者服务对策略、算法的直接访问,封装可能存在变化。

Strategy抽象策略角色

策略、算法家族的抽象,通常为接口,定义每个策略或方法必须具有的方法和属性。

ConcreteStrategy具体策略模式

实现抽象策略中的操作,该类含有具体的业务逻辑。

我们在看看策略模式的通用源码,先看抽象策略角色,它是非常普通的一个接口类。

public interface Strategy{
	//策略模式的接口方法
	public void doSomething();
}

具体策略模式也是一个非常普通的实现类,只需要实现接口中的方法即可。

public class ShoppingStrategy implements Strategy{
	//购物的策略是做什么
	public void doSomething(){
		System.out.println("购物的策略");
	}
}
public class MoviesStrategy implements Strategy{
	//看电影的策略做什么
	public void doSomething(){
		System.out.println("看电影策略");
	}
}

策略模式的重点就是封装角色,它是借用了代理模式的思路。策略模式和代理模式的差别在于:策略模式的封装角色和被封装的策略类不用是同一个方法,如果是同一个方法那就是代码模式。

public class Context{
	//抽象策略
	private Strategy strategy = null;
	//构造函数设置具体策略
	public Context(Strategy strategy){
		this.strategy = strategy;
	}
	//封装后的策略方法
	public void doAnything(){
		this.strategy.doSomething();
	}
}

高层服务和模块的调用非常简单,知道要用那个策略,生产出它的对象,然后放到封装角色中完成任务就可以了

public class ItDog{
	public static void main(String[] args){
		//声明一个具体的策略
		Strategy strategy = new ShoppingStrategy();
		//声明上下文对象
		Context context = new Context(strategy);
		//执行封装后的方法
		context.doAngthing();
	}
}

策略模式就是这么简单,它采用了面向对象的继承和多态。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值