三分钟看懂策略模式

1.概念

其思想是针对一组算法,将每一种算法都封装到具有共同接口的独立的类中,从而是它们可以相互替换。策略模式的最大特点是使得算法可以在不影响客户端的情况下发生变化,从而改变不同的功能。
2.组成

a.抽象策略角色 -----------这个是一个抽象的角色,通常情况下使用接口或者抽象类去实现。对比来说,就是我们的Comparator接口。
b具体策略角色 ----------- 包装了具体的算法和行为。对比来说,就是实现了Comparator接口的实现一组实现类。
3.环境角色 -----------------内部会持有一个抽象角色的引用,给客户端调用。对比来说,就是我们的TreeSet类。说明:TreeSet内部一定会有一个策略类的一个成员变量,这样做的目的在于可以当我们在去创建TreeSet对象的时候,可以接收我们向TreeSet类中传递的具体的策略类。
步骤:
写策略接口

public interface Strategy {
	
    int calNum(int n1,int n2);
    

}

写具体的策略,这里有两个具体的策略类AddStrategy和SubStrategy.

public class AddStrategy implements Strategy{
	@Override
	public int calNum(int n1, int n2) {
		
		return n1+n2;
	}

}
public class SubStrategy implements Strategy{

	@Override
	public int calNum(int n1, int n2) {
		
		return n1-n2;
	}

}

环境类

public class Enviroment {

	private Strategy strategy;

	public Enviroment(Strategy strategy) {
		super();
		this.strategy = strategy;
	}

	public int calulate(int n1, int n2) {
		return strategy.calNum(n1, n2);
	}

}

④编写测试类

public class TestStrategy {

	public static void main(String[] args) {

		System.out.println("AddStrategy策略下的结果----" + new Enviroment(new AddStrategy()).calulate(10, 2));
		System.out.println("SubStrategy策略下的结果----" + new Enviroment(new SubStrategy()).calulate(10, 2));
	}

}

测试结果如图
在这里插入图片描述

总结

在于策略模式把每一种具体的策略都封装成一个实现类,如果策略有很多的话,很显然是实现类就会导致过多,显得臃肿。其实每种设计模式都有它各种的优缺点,在这里呢,我们就要具体情况具体分析了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值