开发一个应用“工厂方法模式”的程序实例。 要求满足以下几点:1)体现“创建型模式”的工作原理;2)尽量符合面向对象的七条设计原则;3)每个实例要有类图、源代码和运行结果。
时间: 2024-10-20 10:16:37 浏览: 21
工厂方法模式是一种创建型设计模式,它允许我们在不指定具体子类的情况下创建对象,而是在运行时由某个策略决定应该创建哪个具体的对象。这有助于降低系统的耦合度,并使得扩展新的产品变得容易。
下面是一个简单的Java示例,用于创建不同类型的汽车:
```java
// 汽车接口
interface Car {
void drive();
}
// 具体车型接口
interface SportCar extends Car {
void drift();
}
// 具体车型实现
class BMW320i : SportCar {
public void drive() {
System.out.println("BMW 320i is driving.");
}
@Override
public void drift() {
System.out.println("BMW 320i drifting.");
}
}
// 又如Ferrari 488 GTB
class Ferrari488GTB : SportCar {
public void drive() {
System.out.println("Ferrari 488 GTB is driving.");
}
@Override
public void drift() {
System.out.println("Ferrari 488 GTB drifting at high speed.");
}
}
// 工厂类,遵循依赖倒置原则
abstract class CarFactory {
protected abstract Car createCar();
}
// BMW工厂
class BMWFactory extends CarFactory {
@Override
protected Car createCar() {
return new BMW320i();
}
}
// Ferrari工厂
class FerrariFactory extends CarFactory {
@Override
protected Car createCar() {
return new Ferrari488GTB();
}
}
public class Application {
public static void main(String[] args) {
CarFactory factory = new BMWFactory(); // 创建宝马工厂
Car car = factory.createCar(); // 使用工厂方法生产车辆
car.drive(); // 输出BMW 320i is driving.
factory = new FerrariFactory(); // 改变工厂
car = factory.createCar(); // 现在生产法拉利
car.drive(); // 输出Ferrari 488 GTB is driving.
car.drift(); // 输出Ferrari 488 GTB drifting at high speed.
}
}
```
在这个例子中,`Car` 和 `SportCar` 定义了接口和继承层次结构,`BMW320i` 和 `Ferrari488GTB` 实现了这些接口。`CarFactory` 和其子类`BMWFactory` 和 `FerrariFactory` 实行了工厂方法,通过工厂类我们可以在运行时动态创建不同类型的汽车对象。
阅读全文