设计模式之:简单工程模式+策略模式

1. 简单工厂模式

1.1要点
  1. 对于一组相关的策略类:使用接口+多个实现类
  2. 使用简单工厂创建策略类, 将具体类对客户代码封装
1.2 代码
public interface IStrategy{
	public void run();
} 
public class StrategyA implements IStrategy{
	public void run(){
		//具体策略
	}
}
public class StrategyB implements IStrategy{
	public void run(){
		//具体策略
	}
}
public class StrategyFactory{
	public static IStrategy create(String strategy){
		if(strategy.equals("A"))
			return new StrategyA();
		else if(strategy.equals("B))
			return new StrategyB();
		else
			throw IllegalArgumentException("暂不支持策略:" + strategy);
	}
}
public class Main{
	public static void main(String[] args){
		IStrategy strategy = StrategyFactory.create(args[0]);
		strategy.run();
	}
}
1.3 总结

将具体策略类向客户隐藏. 如果需要扩展策略,仅需提供新策略的实现,并在策略工厂中增加对新策略的支持.

2 简单工厂方法+策略模式

2.1 要点

对工厂方法进行修改,在简单工厂模式中,工厂仅仅负责创建策略对象.策略的具体执行需要通过返回的策略对象进行相应方法调用.

通过将简单工厂方法与策略模式相结合,构建策略上下文类,该类可以通过传入的策略类别构造对应的实际策略,并提供具体策略方法的执行.

2.2 代码

IStrategy, StrategyA, StrategyB定义与简单工厂方法中一致

public class StrategyContext{
	private IStrategy strategy;
	public StrategyContext(String strategy){
		if(strategy.equals("A))
			this.strategy = new StrategyA();
		else if(strategy.equlas("B"))
			this.strategy = new StrategyB();
		else
			throw new IllegalArgumentException("暂不支持策略:"+strategy);
	}
	public void run(){
		strategy.run();
	}
}
public class Main{
	public static void main(String[] args){
		StrategyContext strategy = new StrategyContext(args[0]);
		strategy.run();
	}
}
2.3 总结

通过将简单工厂方法与策略模式相结合,对用户端仅需暴露一个类即可.进一步提供了客户端调用的透明性.

你可能感兴趣的:(设计模式)