工厂模式是一种创建型设计模式,其目的是封装对象的创建过程,并允许客户端通过工厂接口来获取新的对象。以下是一个简单的示例,说明如何使用工厂模式来创建不同类型的产品。
假设我们要设计一个水果商店系统,其中有苹果、香蕉和橘子三种水果可以销售。此时,我们可以使用工厂模式来创建这些水果对象,具体实现如下:
- 定义水果类:首先,我们需要定义一个
Fruit
抽象类,作为所有水果类的基类,它包含了水果的共同属性和方法。
public abstract class Fruit {
public abstract void eat();
}
- 定义具体水果类:然后,我们定义具体的水果类,例如
Apple
、Banana
和Orange
,它们继承自Fruit
,并实现了eat()
方法。
public class Apple extends Fruit {
@Override
public void eat() {
System.out.println("Eat an apple.");
}
}
public class Banana extends Fruit {
@Override
public void eat() {
System.out.println("Peel and eat a banana.");
}
}
public class Orange extends Fruit {
@Override
public void eat() {
System.out.println("Peel and eat an orange.");
}
}
- 定义工厂接口:接着,我们需要定义一个工厂接口
FruitFactory
,用于创建不同类型的水果对象。
public interface FruitFactory {
Fruit createFruit();
}
- 实现工厂类:最后,我们可以创建一个具体的工厂类,例如
AppleFactory
、BananaFactory
和OrangeFactory
,它们实现了FruitFactory
接口,并负责创建相应的水果对象。
public class AppleFactory implements FruitFactory {
@Override
public Fruit createFruit() {
return new Apple();
}
}
public class BananaFactory implements FruitFactory {
@Override
public Fruit createFruit() {
return new Banana();
}
}
public class OrangeFactory implements FruitFactory {
@Override
public Fruit createFruit() {
return new Orange();
}
}
- 使用工厂模式创建对象:现在,我们可以通过工厂接口来创建新的水果对象,例如:
FruitFactory factory = new AppleFactory();
Fruit fruit = factory.createFruit();
fruit.eat(); // Output: Eat an apple.
这里我们创建了一个AppleFactory
对象,然后使用它的createFruit()
方法来创建一个新的苹果对象。最后,我们调用苹果对象的eat()
方法,输出了"Eat an apple."的结果。
同样的方式也适用于其他类型的水果对象,只需要使用对应的工厂类即可。这样就避免了客户端直接创建对象,降低了耦合度,增加了代码的灵活性。