广东建设注册执业中心网站,深圳定制数控机床,销售怎么找客户源,做英文网站要做适合已经的策略模式
在上下文中携带策略接口作为成员变量#xff0c;在使用上下文之前需要设置策略setStrategy#xff08;#xff09;#xff0c;然后使用策略接口成员变量来进行策略的执行。
步骤1#xff1a;定义策略接口
// 策略接口
public interface Strategy {int execut…策略模式
在上下文中携带策略接口作为成员变量在使用上下文之前需要设置策略setStrategy然后使用策略接口成员变量来进行策略的执行。
步骤1定义策略接口
// 策略接口
public interface Strategy {int execute(int a, int b);
}步骤2实现具体策略类
// 具体策略类加法
public class ConcreteStrategyAdd implements Strategy {Overridepublic int execute(int a, int b) {return a b;}
}// 具体策略类减法
public class ConcreteStrategySubtract implements Strategy {Overridepublic int execute(int a, int b) {return a - b;}
}步骤3创建上下文类
// 上下文类
public class Context {private Strategy strategy;public Context(Strategy strategy) {this.strategy strategy;}public void setStrategy(Strategy strategy) {this.strategy strategy;}//使用成员变量执行public int executeStrategy(int a, int b) {return strategy.execute(a, b);}
}步骤4编写客户端代码
public class Main {public static void main(String[] args) {// 使用加法策略Context context new Context(new ConcreteStrategyAdd());System.out.println(10 5 context.executeStrategy(10, 5));// 切换到减法策略context.setStrategy(new ConcreteStrategySubtract());System.out.println(10 - 5 context.executeStrategy(10, 5));}
}运行结果
10 5 15
10 - 5 5策略模式的例子线程池的拒绝策略 策略模式加工厂模式
在策略上下文类中使用一个策略生成的工厂类然后工厂类会根据执行策略执行的方法传入参数来生成策略并且设置为策略上下文的成员变量然后执行。
状态模式
和策略模式一样都是有一个接口成员变量作为实际的执行者通过设置这个成员变量使得上下文类能执行不同的状态的操作。
// 状态接口
public interface State {void handle(Context context);
}// 具体状态类开
public class OnState implements State {Overridepublic void handle(Context context) {System.out.println(Light is turning off.);context.setState(new OffState());}
}// 具体状态类关
public class OffState implements State {Overridepublic void handle(Context context) {System.out.println(Light is turning on.);context.setState(new OnState());}
}// 上下文类
public class Context {private State state;public Context(State state) {this.state state;}public void setState(State state) {this.state state;}public void request() {state.handle(this);}
}// 客户端代码
public class Main {public static void main(String[] args) {Context context new Context(new OffState());context.request(); // Light is turning on.context.request(); // Light is turning off.}
}策略模式和状态模式的差异
状态可以由状态成员变量执行过程中改变。 例如
// 具体状态类关
public class OffState implements State {Overridepublic void handle(Context context) {System.out.println(Light is turning on.);context.setState(new OnState());}
}而策略模式只是执行策略。