// 创建抽象产品类
public abstract class Animal {
public abstract void speak();
}
public abstract class Plant {
public abstract void photosynthesis();
}
// 创建具体产品类
public class Dog extends Animal {
@Override
public void speak() {
System.out.println("Dog says: Woof!");
}
}
public class Cat extends Animal {
@Override
public void speak() {
System.out.println("Cat says: Meow!");
}
}
public class Tree extends Plant {
@Override
public void photosynthesis() {
System.out.println("Tree is doing photosynthesis.");
}
}
public class Flower extends Plant {
@Override
public void photosynthesis() {
System.out.println("Flower is doing photosynthesis.");
}
}
// 创建抽象工厂类
public abstract class AbstractFactory {
public abstract Animal createAnimal();
public abstract Plant createPlant();
}
// 创建具体工厂类
public class DogFactory extends AbstractFactory {
@Override
public Animal createAnimal() {
return new Dog();
}
@Override
public Plant createPlant() {
return new Tree();
}
}
public class CatFactory extends AbstractFactory {
@Override
public Animal createAnimal() {
return new Cat();
}
@Override
public Plant createPlant() {
return new Flower();
}
}
// 客户端代码
public class Main {
public static void main(String[] args) {
AbstractFactory dogFactory = new DogFactory();
Animal dog = dogFactory.createAnimal();
Plant tree = dogFactory.createPlant();
dog.speak(); // 输出: Dog says: Woof!
tree.photosynthesis(); // 输出: Tree is doing photosynthesis.
AbstractFactory catFactory = new CatFactory();
Animal cat = catFactory.createAnimal();
Plant flower = catFactory.createPlant();
cat.speak(); // 输出: Cat says: Meow!
flower.photosynthesis(); // 输出: Flower is doing photosynthesis.
}
}
在上面的示例中,Animal和Plant是抽象产品类,它们都有一个抽象方法。Dog、Cat、Tree和Flower是具体产品类,它们分别实现了Animal和Plant的抽象方法并输出相应的信息。AbstractFactory是一个抽象工厂类,它有两个抽象方法createAnimal()和createPlant(),分别用于创建Animal和Plant对象。DogFactory和CatFactory是具体工厂类,它们实现了AbstractFactory接口并分别创建Dog、Tree和Cat、Flower对象。在客户端代码Main中,我们使用DogFactory和CatFactory分别创建了Dog、Tree和Cat、Flower对象,并调用了它们的方法输出相应的信息。这样我们就使用了抽象工厂模式来创建不同类型的动物和植物对象。