各位,我给大家出个小学的题目:输入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类,然后把抽象策略、具体策略都内置进去,不就可以解决问题了,是的,可以解决,但是扩展性如何?可读性如何?代码是让人读的,然后才是让机器执行,别把顺序搞反了!
分享到:
相关推荐
在阅读《Effective Java》等编程书籍时,会发现作者常常推荐使用策略模式来代替使用重载方法或枚举类型,因为这提供了更好的灵活性和可扩展性。 总结一下,策略模式是设计模式中的重要一环,它通过将算法封装在独立...
这在设计模式中尤其有用,比如策略模式。 7. 枚举与序列化: 默认情况下,枚举是可序列化的。这意味着枚举实例可以在网络间传输或保存到磁盘,然后恢复。只需确保枚举类实现了`Serializable`接口。 总结,JDK 5.0...
**设计模式——单例模式** 在软件工程中,设计模式是一种在特定场景下解决常见问题的标准方案,可以被复用并提升代码质量。单例模式是设计模式中的一种,它保证一个类只有一个实例,并提供一个全局访问点。这种模式...
本程序通过三种设计模式——策略模式、单例模式和抽象工厂模式,展示了如何在实际项目中为不同用户提供定制化功能。 **策略模式** 是一种行为设计模式,它使你能在运行时改变对象的行为。在这个程序中,策略模式...
此外,对于Java特有的设计模式,如策略模式与Java枚举的结合,以及模板方法在Java异常处理中的应用,本书可能会有详尽的讲解。 这两本书籍是学习设计模式的宝贵资源,可以帮助开发者理解如何在实际项目中应用设计...
8. **策略模式**:策略模式定义了一系列算法,并将每个算法封装起来,使它们可以互相替换,策略对象可以独立变化,降低了系统的耦合度。 9. **桥接模式**:桥接模式将抽象部分与实现部分分离,使它们可以独立变化,...
策略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 ...
10. **策略模式**:定义一系列的算法,并将每一个算法封装起来,使它们可以互相替换。策略模式让算法的变化独立于使用算法的客户。 这些模式不仅限于Java,而是跨语言的。理解并掌握这些设计模式,能够帮助开发者...
3. 行为型模式:这一类模式涉及到对象之间的通信和职责分配,如观察者模式(Observer)、责任链模式(Chain of Responsibility)、命令模式(Command)以及策略模式(Strategy)。这些模式提供了一种灵活的方式来...
- **策略模式**:定义了一系列算法,并将每一个算法封装起来,使它们可以互相替换。 - **观察者模式**:定义了一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 ###...
10. **策略模式**:定义一系列的算法,并将每个算法封装起来,使它们可以互相替换。Java中的Comparator接口就是一个策略的实例。 11. **模板方法模式**:定义一个操作中的算法骨架,而将一些步骤延迟到子类中。在...
#### 创建型模式的具体示例——迷宫游戏 为了更好地理解创建型模式的应用,本文将通过一个迷宫游戏的例子来说明这些模式的实现。在这个例子中,迷宫是由一系列房间组成的,每个房间可以与相邻的房间通过墙或门相连...
9. **设计模式(Design Patterns)**: 诸如工厂模式、单例模式、观察者模式等经典设计模式,能够解决常见的软件设计问题,提高代码的可维护性和扩展性。 10. **性能优化**: 学习如何利用编译器选项进行优化,理解并...
- Swift:结构体与枚举,类与继承,协议与扩展,Optionals,泛型,闭包,以及Swift特有的安全特性。 2. **UIKit框架**: - 视图控件(UILabel,UIButton,UIImageView等)的使用与自定义。 - UIViewController...
MVC模式是软件设计中的一种架构模式,将模型、视图和控制器分离,便于维护和扩展。 面试中,这些问题通常会深入探讨,比如JSP的EL(Expression Language)和JSTL(JavaServer Pages Standard Tag Library),...
4. **策略模式(Strategy Pattern)**:定义一系列算法,把它们一个个封装起来,并且使它们可相互替换。 5. **观察者模式(Observer Pattern)**:定义对象之间的一种一对多的依赖关系,当一个对象的状态发生改变...