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

    各位,我给大家出个小学的题目:输入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类,然后把抽象策略、具体策略都内置进去,不就可以解决问题了,是的,可以解决,但是扩展性如何?可读性如何?代码是让人读的,然后才是让机器执行,别把顺序搞反了!

转自:http://www.cnblogs.com/cbf4life/archive/2010/03/17/1688564.html

转载于:https://www.cnblogs.com/myphoebe/archive/2011/11/10/2244803.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
枚举策略模式(Strategy Pattern)是行为设计模式的一种,它允许你定义一系列算法,并将每个算法封装在独立的类中,然后将它们作为参数传递给一个共同的接口或抽象类。在Java中,枚举类型非常适合用来实现策略模式,因为枚举可以提供有限且预定义的选项。 Java枚举策略模式的实现通常包括以下几个步骤: 1. **接口或抽象类**:定义一个策略接口或抽象类,包含具体执行操作的方法。例如: ```java public interface PaymentStrategy { void processPayment(double amount); } ``` 2. **枚举类**:为每种策略创建一个枚举类,继承自策略接口或实现抽象类,并实现具体方法。比如: ```java public enum PaymentMethod implements PaymentStrategy { CASH("Cash", amount -> System.out.println("Processing cash payment...")), DEBIT_CARD("Debit Card", amount -> System.out.println("Processing debit card payment...")); private String name; private Function<Double, Void> processPayment; PaymentMethod(String name, Function<Double, Void> processPayment) { this.name = name; this.processPayment = processPayment; } @Override public void processPayment(double amount) { processPayment.apply(amount); } public String getName() { return name; } } ``` 3. **客户端使用**:在需要使用策略的地方,可以创建枚举类型的实例并调用其方法: ```java public class PaymentProcessor { private PaymentStrategy strategy; public void setPaymentStrategy(PaymentStrategy strategy) { this.strategy = strategy; } public void processPayment(double amount) { strategy.processPayment(amount); } } PaymentProcessor processor = new PaymentProcessor(); processor.setPaymentStrategy(PaymentMethod.CASH); processor.processPayment(100.0); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值