揭秘设计模式:策略模式(Strategy)的枚举(Enum)实现

    链接地址:http://www.xx566.com/detail/120.html

    上一篇:揭秘设计模式:策略模式(Strategy)的学习与理解,我们简单的对策略模式做了学习和了解,之后又趁热打铁的阅读了不同设计模式书籍中,对策略模式的讲解,本质上的内容大同小异,不过在阅读设计模式之禅中,关于策略模式的讲解有点意思,使用了JDK5中的enum类型,也列举了一个明确的例子,特别来记录消化一下。

    继续上一篇的例子,我们需要实现对不同类型的游戏收取不同的手续费,我们先来看一下枚举类型的实现代码,简单的有些出乎意料,我们首先定义一个枚举类型, 里面包含一个计算手续费的抽象方法,接收交易金额为参数,然后,我们枚举不同的游戏类型,端游,页游,手游,并对抽象方法进行实现,并提供一个简单的 main方法进行测试,整体代码如下:

package javase.strategy;
 
/**
 * 手续费计算
 * 
 * @Package javase.strategy
 * @ClassName: HandFeeCaculator
 * @author Realfighter
 * @date 2014-8-8 下午04:08:52
 */
public enum HandFeeCaculator {
 
    // 端游
    PC {
        public double count(double amount) {
            return amount * 5 / 100;
        }
    },
    // 页游
    PAGE {
        public double count(double amount) {
            return amount * 2 / 100;
        }
    },
    // 手游
    MOBILE {
        public double count(double amount) {
            return 0.0;
        }
    };
 
    /**
     * 手续费计算的抽象方法
     * 
     * @Title: count
     * @author Realfighter
     * @date 2014-8-8 下午04:22:53
     * @param amount
     *            交易金额
     * @return double
     */
    public abstract double count(double amount);
 
    //简单测试
    public static void main(String[] args) {
        // 交易金额
        double amount = 500.0;
        // 计算不同游戏类型的手续费
        System.out.println(HandFeeCaculator.PC.count(amount));
 
        System.out.println(HandFeeCaculator.PAGE.count(amount));
 
        System.out.println(HandFeeCaculator.MOBILE.count(amount));
    }
 
}

    代码很简单把,下面我们来简单的剖析一下:上面的例子中,也是对策略模式的应用,我们定义了一个抽象的count()方法,承担Strategy的角色, 之后在枚举的每个成员中,对这个抽象方法进行了实现,承担典型的ConcreteStrategy角色,而枚举类本身又承担了Context环境角色的作 用,我们通过选择不同的枚举成员就可以达到计算不同手续费的目的,挺有意思的,利用枚举实现了典型的策略模式,与之前枚举的单例实现一样(具体内容请点 击:三种方式实现类的Singleton(单例)),给人眼前一亮的感觉。

你可能感兴趣的:(java,设计模式,枚举,策略模式,strategy)