【奔跑的菜鸟】Java中的设计模式——策略模式

Java的策略模式主要体现了两个非常基本的面向对象的设计原则。1.封装。2在编程中使用接口,而不是直接使用接口的实现。

策略模式的组成:1)抽象策略角色,通常为一个接口抽象类。 2)具体策略角色,包装了相关算法和行为。3)环境角色,持有一个策略类的引用,最终给客户端调用

对于策略模式,算法和环境独立开来,修改算法不会影响环境和客户端。

看下面一个例子:

首先确定一个接口:

package test2;

public interface Strategy
{
	public int calculate(int a,int b);
}

再对这个实现一些具体的方法(加减乘除):

package test2;

public class AddStrategy implements Strategy
{


	public int calculate(int a, int b)
	{
		return a + b;
	}

}


package test2;

public class SubtractStrategy implements Strategy
{

	public int calculate(int a, int b)
	{
		
		return a - b;
	}

}

package test2;

public class MultipleStrategy implements Strategy
{

	public int calculate(int a, int b)
	{
	
		return a * b;
	}

}

package test2;

public class DivideStrategy implements Strategy
{

	public int calculate(int a, int b)
	{
		
		return a/b;
	}

}

再设置一个环境:

package test2;

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

	public Strategy getStrategy()
	{
		return strategy;
	}

	public void setStrategy(Strategy strategy)
	{
		this.strategy = strategy;
	}
	
	public int calculate(int a ,int b)
	{
		return strategy.calculate(a,b);
	}
	
}

最后客户端调用:
package test2;

public class Client
{
	public static void main(String[] args)
	{
		AddStrategy add = new AddStrategy();

		Enviroment enviroment = new Enviroment(add);

		System.out.println(enviroment.calculate(6, 3));
		
		SubtractStrategy subtract = new SubtractStrategy();

		enviroment.setStrategy(subtract);

		System.out.println(enviroment.calculate(6, 3));

		MultipleStrategy multi = new MultipleStrategy();

		enviroment.setStrategy(multi);

		System.out.println(enviroment.calculate(6, 3));

		DivideStrategy divide = new DivideStrategy();

		enviroment.setStrategy(divide);

		System.out.println(enviroment.calculate(6, 3));

	}
}


最后运行结果如下:

9
3
18
2














  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值