策略模式
定义:定义了算法族,分别封装起来,让他们之间可以互相替换,此模式的变化独立于算法的使用者
有一个电商平台,当用户消费满1000元,根据vip等级可享受优惠
- 普通会员 不打折
- 白银会员 优惠50元
- 黄金会员 打8折
- 白金会员 优惠50元,再打七折
Version 1.0
会员类型枚举
1 | public enum UserType { |
1 | private static double getResult(long money, int type){ |
下面使用策略模式来优化
Version 1.2
策略接口
1 | public interface Strategy { |
普通会员
1 | public class OrdinaryStrategy implements Strategy{ |
黄金会员
1 | public class GoldStrategy implements Strategy{ |
白金会员
1 | public class PlatinumStrategy implements Strategy{ |
白银会员
1 | public class SilverStrategy implements Strategy{ |
1 | public static double getResult(long money,int type){ |
Version 2.1
1 | public class StrategyFactory { |
1 | public static double getResult(int userType, long money){ |
这里的工厂还可以通过这种方式来实现
Version 2.2
策略接口
1 | public interface Strategy { |
黄金会员
1 | public class GoldStrategy implements Strategy { |
普通会员
1 | public class OrdinaryStrategy implements Strategy { |
白金会员
1 | public class PlatinumStrategy implements Strategy { |
白银会员
1 | public class SilverStrategy implements Strategy { |
策略工厂
1 | public class StrategyFactory { |
1 | public static double getResult(int userType, long money){ |