策略模式(Strategy):它定义了算法家族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化,不会影响到使用算法的客户。
策略模式Demo:
/**
* 2018年3月25日下午7:18:05
*/
package com.Designpattern;
/**
* @author xinwenfeng
*
*/
public class TestStrategy {
/**
* @param args
*/
public static void main(String[] args) {
StrategyContext strategyContext;
strategyContext = new StrategyContext(new StrategyA());//客户端要知道具体算法
strategyContext.doStrategy();
strategyContext = new StrategyContext(new StrategyB());
strategyContext.doStrategy();
System.out.println("=======================================");
ContextAndFactory contextAndFactory;
contextAndFactory = new ContextAndFactory("A");//不需要知道算法类
contextAndFactory.doStrategy();
contextAndFactory = new ContextAndFactory("B");
contextAndFactory.doStrategy();
}
}
abstract class Strategy{
public abstract void method();
}
class StrategyA extends Strategy{//具体算法
@Override
public void method() {
System.out.println("执行策略A。");
}
}
class StrategyB extends Strategy{//具体算法
@Override
public void method() {
System.out.println("执行策略B。");
}
}
class StrategyContext{
Strategy strategy;//维护一个Strategy的引用
public StrategyContext(Strategy strategy) {
this.strategy = strategy;
}
public void doStrategy() {//根据具体策略对象调用算法
if(null != strategy) {
strategy.method();
}
}
}
class ContextAndFactory{//策略与简单工厂结合
Strategy strategy;
public ContextAndFactory(String s) {
switch(s) {
case "A":
strategy = new StrategyA();
break;
case "B":
strategy = new StrategyB();
break;
}
}
public void doStrategy() {
if(null != strategy) {
strategy.method();
}
}
}
结果:

本文通过一个具体的例子详细介绍了策略模式的概念及其实现方式。策略模式允许将一组算法封装为一系列的对象,使得可以在运行时自由切换算法。
1635

被折叠的 条评论
为什么被折叠?



