`
cbf4life
  • 浏览: 25914 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

策略模式的扩展——策略枚举

 
阅读更多

    各位,我给大家出个小学的题目:输入3个参数,进行加减法运算,参数中两个是int型的,剩下的一个参数是String型的,只有“+”,“-”两个符号可以选择,不要考虑什么复杂的校验,我们做的是白箱测试,输入的就是标准的int类型和合规的String类型,各位大侠,想想看,怎么做,简单得很!
    有非常多的实现方式,我今天来说四种,先说第一种,写一个类,然后进行加减法运算,类图也不用画了,太简单了,直接看代码:

public enum Calculator { 
//加法运算 
ADD("+"){ 
public int exec(int a,int b){ 
return a+b; 
} 
}, 
//减法运算 
SUB("-"){ 
public int exec(int a,int b){ 
return a - b; 
} 
}; 

String value = ""; 
//定义成员值类型 
private Calculator(String _value){ 
this.value = _value; 
} 
//获得枚举成员的值 
public String getValue(){ 
return this.value; 
} 
//声明一个抽象函数 
public abstract int exec(int a,int b); 
} 


 

 

 

    先想一想它的名字,为什么叫做策略枚举?枚举没有问题,它就是一个Enum类型,那为什么又叫做策略呢?找找看能不能找到策略的影子在里面,是的,我们定义了一个抽象的方法exec,然后在每个枚举成员中进行了实现,如果不实现呢?你试试看看,不实现该方法就不能编译,现在是不是清楚了?把原有定义在抽象策略中的方法移植到枚举中,每个枚举成员就成为一个具体策略。简单吧,总结一下,策略枚举就是这样一个枚举:

  • 它是一个枚举。
  •  它是一个浓缩了的策略模式的枚举。

    当然,各位可能要反思了,我使用内置类也可以实现相同的功能,写一个Context类,然后把抽象策略、具体策略都内置进去,不就可以解决问题了,是的,可以解决,但是扩展性如何?可读性如何?代码是让人读的,然后才是让机器执行,别把顺序搞反了!

 

分享到:
评论
3 楼 xttifqqk 2010-09-04  
不冷,看到这贴子,学到了东西,以前没想过这样来用。
2 楼 justlive 2010-03-18  
很有意思。学习了
1 楼 cbf4life 2010-03-18  
这帖子这么冷? 抖索中

相关推荐

    java设计模式之——策略模式

    在阅读《Effective Java》等编程书籍时,会发现作者常常推荐使用策略模式来代替使用重载方法或枚举类型,因为这提供了更好的灵活性和可扩展性。 总结一下,策略模式是设计模式中的重要一环,它通过将算法封装在独立...

    JDK5.0新特性(3)——枚举

    这在设计模式中尤其有用,比如策略模式。 7. 枚举与序列化: 默认情况下,枚举是可序列化的。这意味着枚举实例可以在网络间传输或保存到磁盘,然后恢复。只需确保枚举类实现了`Serializable`接口。 总结,JDK 5.0...

    设计模式——单例模式

    **设计模式——单例模式** 在软件工程中,设计模式是一种在特定场景下解决常见问题的标准方案,可以被复用并提升代码质量。单例模式是设计模式中的一种,它保证一个类只有一个实例,并提供一个全局访问点。这种模式...

    3种设计模式的java小程序

    本程序通过三种设计模式——策略模式、单例模式和抽象工厂模式,展示了如何在实际项目中为不同用户提供定制化功能。 **策略模式** 是一种行为设计模式,它使你能在运行时改变对象的行为。在这个程序中,策略模式...

    设计模式的几本书

    此外,对于Java特有的设计模式,如策略模式与Java枚举的结合,以及模板方法在Java异常处理中的应用,本书可能会有详尽的讲解。 这两本书籍是学习设计模式的宝贵资源,可以帮助开发者理解如何在实际项目中应用设计...

    Java-Zen-of-Design.rar_zen_设计模式之禅

    8. **策略模式**:策略模式定义了一系列算法,并将每个算法封装起来,使它们可以互相替换,策略对象可以独立变化,降低了系统的耦合度。 9. **桥接模式**:桥接模式将抽象部分与实现部分分离,使它们可以独立变化,...

    OBJECTIVE-C编程之道 IOS设计模式解析电子书+源代码

    策略19.1 何为策略模式19.2 何时使用策略模式19.3 在UITextField中应用验证策略19.4 总结第20章 命令20.1 何为命令模式20.2 何时使用命令模式20.3 在Cocoa Touch框架中使用命令模式20.3.1 NSInvocation对象20.3.2 ...

    JAVA设计模式.rar

    10. **策略模式**:定义一系列的算法,并将每一个算法封装起来,使它们可以互相替换。策略模式让算法的变化独立于使用算法的客户。 这些模式不仅限于Java,而是跨语言的。理解并掌握这些设计模式,能够帮助开发者...

    设计模式 - 可复用面向对象软件的基础(高清版).rar

    3. 行为型模式:这一类模式涉及到对象之间的通信和职责分配,如观察者模式(Observer)、责任链模式(Chain of Responsibility)、命令模式(Command)以及策略模式(Strategy)。这些模式提供了一种灵活的方式来...

    用Java模式思考Thinking in Patterns with Java

    - **策略模式**:定义了一系列算法,并将每一个算法封装起来,使它们可以互相替换。 - **观察者模式**:定义了一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 ###...

    设计模式--Java语言版本

    10. **策略模式**:定义一系列的算法,并将每个算法封装起来,使它们可以互相替换。Java中的Comparator接口就是一个策略的实例。 11. **模板方法模式**:定义一个操作中的算法骨架,而将一些步骤延迟到子类中。在...

    设计模式:可复用面向对象软件的基3

    #### 创建型模式的具体示例——迷宫游戏 为了更好地理解创建型模式的应用,本文将通过一个迷宫游戏的例子来说明这些模式的实现。在这个例子中,迷宫是由一系列房间组成的,每个房间可以与相邻的房间通过墙或门相连...

    c++编程惯用法——高级程序员常用方法和技巧.rar

    9. **设计模式(Design Patterns)**: 诸如工厂模式、单例模式、观察者模式等经典设计模式,能够解决常见的软件设计问题,提高代码的可维护性和扩展性。 10. **性能优化**: 学习如何利用编译器选项进行优化,理解并...

    IOS应用源码——面试题讲解.zip

    - Swift:结构体与枚举,类与继承,协议与扩展,Optionals,泛型,闭包,以及Swift特有的安全特性。 2. **UIKit框架**: - 视图控件(UILabel,UIButton,UIImageView等)的使用与自定义。 - UIViewController...

    Java面试题——重整理版

    MVC模式是软件设计中的一种架构模式,将模型、视图和控制器分离,便于维护和扩展。 面试中,这些问题通常会深入探讨,比如JSP的EL(Expression Language)和JSTL(JavaServer Pages Standard Tag Library),...

    [NET设计规范:约定、惯用法与模式(第2版)].Krzysztof.Cwalina等.扫描版

    4. **策略模式(Strategy Pattern)**:定义一系列算法,把它们一个个封装起来,并且使它们可相互替换。 5. **观察者模式(Observer Pattern)**:定义对象之间的一种一对多的依赖关系,当一个对象的状态发生改变...

Global site tag (gtag.js) - Google Analytics