设计模式_策略模式
博主写此博之前还没有经过实践,只是百度了下策略模式的使用场景跟最简单的案例,
使用场景:比如在一家图书馆中,在五一节假日对读者借书有优惠活动,普通借读费为原价的9折,对初级会员有8折,对vip特级会员是7折,在此场景中不同用户对应了不同的算法结构场景,此时可考虑使用策略模式来解决这个问题,,,上代码看个例子来慢慢理解。
1.首先来一个策略接口;
package com.IStrategy; /** * Created by Administrator on 2017/4/16. */ public interface IStrategy { public void oprate(); }
2.给他来三个实现,对应上面的三种会员级别;
package com.IStrategy; /** * Created by Administrator on 2017/4/16. */ public class IStrategyImpA implements IStrategy { @Override public void oprate() { System.out.println("策略接口实现A"); } }
----------------------------------------------------------------------------
package com.IStrategy; /** * Created by Administrator on 2017/4/16. */ public class IStrategyImpB implements IStrategy { @Override public void oprate() { System.out.println("策略接口实现B"); } }
-----------------------------------------------------------------------------------------
package com.IStrategy; /** * Created by Administrator on 2017/4/16. */ public class IStrategyImpC implements IStrategy { @Override public void oprate() { System.out.println("策略接口实现C"); } }
3.这里是关键,来个Content类,当创建Content对象的时候把策略接口传递进去,并且对策略接口中的方法加以智能调用
package com.IStrategy; /** * Created by Administrator on 2017/4/16. */ public class Content { private IStrategy iStrategy; public Content(IStrategy iStrategy){ this.iStrategy = iStrategy; } public void contentOprate(){ this.iStrategy.oprate(); } }
4.测试下看看,直接创建Content类对象,传递参数为策略接口的任意一个实现,然后用Content对象调用对策略接口方法的改造方法即可。
package com.IStrategy; /** * Created by Administrator on 2017/4/16. */ public class Test { public static void main(String[] args) { Content content; content = new Content(new IStrategyImpA()); content.contentOprate(); } }
本节结束