策略模式:定义一系列算法,把他们封装起来,并且使它们可相互替换。要求使用策略模式解决以下问题: 高考入学考试课程有3门,分别是数学、语文、外语,每门150分,高考招生时,重点大学录取规则为录取最低分数线时350分。普通大学录取规则为300分。 具体要求: (1)说明策略模式中3个角色以及具体作用。 (2)定义Student类,包含姓名和存放成绩的double数组,以及构造方法。 (3)定义Strategy楼口,是面封装enterRule方法,要求参数是一个double数组。 (4)定义具体策略类StrategyA要求实现Strategy接口,用于实现重点大学录取。 (5)定义具体策略类StrategyB要求实现Strategy接口,用于实现普通大学录取。 (6)定义Comtext类,包含成员变景Strategy接口,以及相应setStrategy方法和用于判断是否录取的public void getAccepet(double a(])方法。 (7)定义应用程序Application类,使用策略模式中所涉及的类,判断高考数学分数为120分,语文分数为116分,外语为130分的李婷同学是否被重点大学录取。判断高考数学分数为100分,语文分数为90分,外语为80分的张宇同学是否被普通大学录取。
时间: 2024-03-12 22:46:15 浏览: 78
策略模式中的三个角色:
1. Context(上下文):持有一个策略对象的引用,负责将具体的请求委派给策略对象进行处理。
2. Strategy(策略):定义所有支持算法的公共接口,声明一个`enterRule`方法来封装具体的算法实现。
3. ConcreteStrategy(具体策略):实现`Strategy`接口,封装了具体的算法实现。
以下是使用策略模式解决高考录取问题的代码实现:
```java
// 定义 Student 类
class Student {
private String name;
private double[] scores;
public Student(String name, double[] scores) {
this.name = name;
this.scores = scores;
}
public double[] getScores() {
return scores;
}
}
// 定义 Strategy 接口
interface Strategy {
public boolean enterRule(double[] scores);
}
// 定义具体策略类 StrategyA
class StrategyA implements Strategy {
public boolean enterRule(double[] scores) {
double sum = scores[0] + scores[1] + scores[2];
return sum >= 350;
}
}
// 定义具体策略类 StrategyB
class StrategyB implements Strategy {
public boolean enterRule(double[] scores) {
double sum = scores[0] + scores[1] + scores[2];
return sum >= 300;
}
}
// 定义 Context 类
class Context {
private Strategy strategy;
public Context(Strategy strategy) {
this.strategy = strategy;
}
public void setStrategy(Strategy strategy) {
this.strategy = strategy;
}
public void getAccept(double[] scores) {
boolean accepted = strategy.enterRule(scores);
if (accepted) {
System.out.println("录取成功!");
} else {
System.out.println("未被录取!");
}
}
}
// 定义应用程序 Application 类
public class Application {
public static void main(String[] args) {
double[] scores1 = {120, 116, 130};
double[] scores2 = {100, 90, 80};
Student student1 = new Student("李婷", scores1);
Student student2 = new Student("张宇", scores2);
Strategy strategyA = new StrategyA();
Strategy strategyB = new StrategyB();
Context context = new Context(strategyA);
System.out.println("李婷:");
context.getAccept(student1.getScores());
context.setStrategy(strategyB);
System.out.println("张宇:");
context.getAccept(student2.getScores());
}
}
```
以上代码实现了策略模式的要求,通过定义`Strategy`接口和具体的策略类`StrategyA`和`StrategyB`,实现了不同的录取规则。同时,在`Context`类中持有一个`Strategy`接口的引用,可以根据不同的情况切换具体的策略对象。在`Application`类中,创建了两个学生对象,分别调用了`Context`类的`getAccept`方法来判断是否被录取。输出结果为:
```
李婷:
录取成功!
张宇:
未被录取!
```
阅读全文