使用策略模式设计一个系统,该系统包含几种输出英文字母表的策略。
时间: 2024-05-14 20:15:33 浏览: 84
好的,我来为您介绍一下策略模式的设计思路。
首先,我们需要定义一个抽象策略类 `OutputStrategy`,它包含一个输出字母表的方法 `outputAlphabet()`。
```java
public abstract class OutputStrategy {
public abstract void outputAlphabet();
}
```
接下来,我们可以定义几个具体的策略类,它们分别实现 `OutputStrategy` 抽象类中的 `outputAlphabet()` 方法,实现不同的字母表输出策略。
```java
public class UpperCaseOutputStrategy extends OutputStrategy {
@Override
public void outputAlphabet() {
for(char c = 'A'; c <= 'Z'; c++) {
System.out.print(c + " ");
}
}
}
public class LowerCaseOutputStrategy extends OutputStrategy {
@Override
public void outputAlphabet() {
for(char c = 'a'; c <= 'z'; c++) {
System.out.print(c + " ");
}
}
}
public class VowelOutputStrategy extends OutputStrategy {
@Override
public void outputAlphabet() {
String vowels = "aeiou";
for(char c = 'a'; c <= 'z'; c++) {
if(vowels.indexOf(c) >= 0) {
System.out.print(c + " ");
}
}
}
}
```
最后,我们可以定义一个包含输出字母表策略的上下文类 `AlphabetContext`,它包含一个 `output()` 方法,根据传入的参数选择不同的策略进行输出。
```java
public class AlphabetContext {
private OutputStrategy outputStrategy;
public AlphabetContext(OutputStrategy outputStrategy) {
this.outputStrategy = outputStrategy;
}
public void output() {
if(outputStrategy != null) {
outputStrategy.outputAlphabet();
}
}
}
```
这样,我们就可以根据需要选择不同的输出策略进行字母表的输出了。比如:
```java
AlphabetContext context = new AlphabetContext(new UpperCaseOutputStrategy());
context.output(); // 输出大写字母表
context = new AlphabetContext(new LowerCaseOutputStrategy());
context.output(); // 输出小写字母表
context = new AlphabetContext(new VowelOutputStrategy());
context.output(); // 输出元音字母表
```
希望我的回答能够帮助您理解策略模式的设计思路。
阅读全文