遵义网站建设制作,网站建设龙头股,360营销平台,wordpress 漂浮广告目录 一、行为型模式
1.1、策略模式
1.1.1、概论
1.1.2、案例实现
1.1.3、优缺点
1.1.4、使用场景 一、行为型模式 1.1、策略模式
1.1.1、概论
策略模式设计的每一个算法都封装了起来#xff0c;使他们可以相互替换#xff0c;通过一个对象委派不同的算法给相应的客户…目录 一、行为型模式
1.1、策略模式
1.1.1、概论
1.1.2、案例实现
1.1.3、优缺点
1.1.4、使用场景 一、行为型模式 1.1、策略模式
1.1.1、概论
策略模式设计的每一个算法都封装了起来使他们可以相互替换通过一个对象委派不同的算法给相应的客户进行使用.
例如一家百货公司规定在逢年过节的时候进行促销活动. 针对不同的节日春节、中秋节、端午节推出不同的促销活动然后由 促销员 将促销活动展示给客户.
策略模式主要角色如下
抽象策略类由一个接口或者抽象类来实现给出了所有 具体策略类 所需的接口.提交策略类实现了抽下你个策略定义的接口提供具体的算法实现.环境类持有一个策略类引用最终给客户端调用. 1.1.2、案例实现
针对以上案例进行实现.
/*** 抽象策略: 促销活动接口*/
public interface Strategy {void show();}/*** 具体策略类: 春节活动类*/
public class StrategyA implements Strategy {Overridepublic void show() {System.out.println(春节到了全场买一送一);}}/*** 具体策略类: 中秋节活动类*/
public class StrategyB implements Strategy {Overridepublic void show() {System.out.println(中秋节到了全场满 50 送月饼);}}/*** 具体策略类: 端午节活动类*/
public class StrategyC implements Strategy {Overridepublic void show() {System.out.println(端午节到了全场满 80 送粽子);}}/*** 环境类: 销售员类*/
public class SalesMan {private Strategy strategy;public SalesMan(Strategy strategy) {this.strategy strategy;}public Strategy getStrategy() {return strategy;}public void setStrategy(Strategy strategy) {this.strategy strategy;}public void showAction() {strategy.show();}}public class Client {public static void main(String[] args) {//1.春节SalesMan man new SalesMan(new StrategyA());man.showAction();System.out.println();//2.中秋节man.setStrategy(new StrategyB());man.showAction();System.out.println();//3.端午节man.setStrategy(new StrategyC());man.showAction();System.out.println();}}执行结果如下 1.1.3、优缺点 优点 策略类之间可以自由切换由于策略类都实现同一个接口所以使得他们之间可以根据不同的需求场景任意切换.易扩展符合开闭原则增加一个新的的策略只需要添加一个具体的策略类即可不需要修改原有代码.避免使用多重条件选择语句if else充分体现面向对象设计思想. 缺点 客户端必须知道所有的策略类并自行决定使用哪个策略类.
策略模式将造成产生多个策略类一个策略产生一个类. 1.1.4、使用场景
一个系统需要动态的在几种算法中选择一种时可以将每个算法封装到策略类中.一个类定义了多个行为并且这些行为在这个类中以多个条件语句if else出现就可以将每个分支移入他们各自的策略类中以替代这些条件语句.每个策略算法彼此独立要对客户隐藏具体算法实现细节.