前言
工厂模式关注于创建单个对象,通过一个工厂类来实现。但是假如遇到需要创建一系列相关或相互依赖的对象的时候,就有些乏力了,而抽象工厂模式能很好的解决这个问题。
抽象工厂模式
1 2 3 4 5 6 7 8 9 10 11 12
| public abstract class Fruit { protected final String name;
protected Fruit(String name) { this.name = name; }
@Override public String toString() { return name +"@"+hashCode(); } }
|
1 2 3 4 5 6
| public class Apple extends Fruit {
public Apple() { super("苹果"); } }
|
1 2 3 4 5 6
| public class Orange extends Fruit {
public Orange() { super("橘子"); } }
|
1 2 3 4
| public abstract class AbstractFruitFactory { public abstract Fruit getApple(); public abstract Fruit getOrange(); }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| public class AppleFactory extends AbstractFruitFactory { @Override public Fruit createApple() { return new Apple(); }
@Override public Fruit createOrange() { return null; } }
public class OrangeFactory extends AbstractFruitFactory { @Override public Fruit createApple() { return null; }
@Override public Fruit createOrange() { return new Orange(); } }
|
1 2 3 4 5 6 7 8 9 10 11
| public class Main { public static void main(String[] args) { AbstractFruitFactory appleFactory = new AppleFactory(); Fruit apple = appleFactory.createApple(); System.out.println(apple);
AbstractFruitFactory orangeFactory = new OrangeFactory(); Fruit orange = orangeFactory.createOrange(); System.out.println(orange); }
|
工厂模式和抽象工厂模式的区别
工厂模式关注于创建单个对象,通常是通过一个工厂类来实现。
工厂模式适用于创建单个对象的场景,抽象工厂模式适用于需要创建一系列相关对象的场景。
抽象工厂模式则更加封闭,因为它需要一次性定义所有产品族的创建方法。