Java设计模式泛型化之策略模式

对于策略模式的理解是这样的:

做同一类型的事情,有不同的做法,这依赖于不同的上下文环境。但是有一个统一的模式。

就好像某网站对不同等级的用户有不同的折扣一样。

下面是代码结构:

策略接口

public interface Strategy {

	public void doSomething();
}

不同策略的不同实现

public class StrategyA implements Strategy {

	@Override
	public void doSomething() {
		System.out.println("Strategy A do something.");
	}

}

public class StrategyB implements Strategy {

	@Override
	public void doSomething() {
		System.out.println("Strategy B do something.");
	}

}

策略执行的统一方式

public class Context {

	private Strategy strategy;
	
	public Context(Strategy strategy) {
		this.strategy = strategy;
	}
	
	public void execute() {
		this.strategy.doSomething();
	}
}

调用者

public class StrategyCaller {

	public static void main(String[] args) {
		Context c = new Context(new StrategyA());
		c.execute();
		
		Context c2 = new Context(new StrategyB());
		c2.execute();
	}
}

那么该如何泛型化呢?


这个模式里面对策略进行处理的就是Context类了。所以,从Context开始入手。

下面是泛型化代码:

策略的统一执行方式

@SuppressWarnings("all")
public class Context {
	
	private Strategy s;

	public Context(Class c) {
		try {
			s = (T) Class.forName(c.getName()).newInstance();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public void execute() {
		s.doSomething();
	}
	
}

调用者

public class StrategyCaller {

	public static void main(String[] args) {
		Context c = new Context(StrategyA.class);
		c.execute();
		
		Context c2 = new Context(StrategyB.class);
		c2.execute();
	}
}

就是这样。

你可能感兴趣的:(Java,设计,Java技术)