Java设计模式之抽象工厂模式

一、什么是抽象工厂模式

抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的。抽象工厂模式可以向客户端提供一个借口,使得客户端在不必指定产品的具体类型的情况下,能够创建多个产品族的产品对象。

Fruit接口

public interface Fruit {
    /*
     * 采集
     */
    public void get();
}

Apple抽象类

public abstract class Apple implements Fruit{
    /*
     * 采集
     */
    public abstract void get();
}

Banana抽象类

public abstract class Banana implements Fruit{
    /*
     * 采集
     */
    public abstract void get();
}

FruitFactory工厂类

public interface FruitFactory {
    //实例化Apple
    public Fruit getApple();
    //实例化Banana
    public Fruit getBanana();
}

NorthFruitFactory南方工厂

public class NorthFruitFactory implements FruitFactory {

    public Fruit getApple() {
        return new NorthApple();
    }

    public Fruit getBanana() {
        return new NorthBanana();
    }

}

SouthFruitFactory工厂类

public class SouthFruitFactory implements FruitFactory {

    public Fruit getApple() {
        return new SouthApple();
    }

    public Fruit getBanana() {
        return new SouthBanana();
    }

}

NorthApple北方苹果类

public class NorthApple extends Apple {

    public void get() {
        System.out.println("采集北方苹果");
    }

}

NorthBanana北方香蕉

public class NorthBanana extends Banana {

    public void get() {
        System.out.println("采集北方香蕉");
    }

}
SouthApple 南方苹果
public class SouthApple extends Apple {

    public void get() {
        System.out.println("采集南方苹果");
    }

}
SouthBanana 南方香蕉
public class SouthBanana extends Banana {

    public void get() {
        System.out.println("采集南方香蕉");
    }

}

如果我们增加一个新的温室系列产品则只需要新增

WenshiFruitFactory 温室工厂
public class WenshiFruitFactory implements FruitFactory {

    public Fruit getApple() {
        return new WenshiApple();
    }

    public Fruit getBanana() {
        return new WenshiBanana();
    }

}
WenshiApple 温室苹果
public class WenshiApple extends Apple {

    public void get() {
        System.out.println("采集温室苹果");
    }

}
WenshiBanana 温室香蕉
public class WenshiBanana extends Banana {

    public void get() {
        System.out.println("采集温室香蕉");
    }

}

测试类mainclass

public class MainClass {
    public static void main(String[] args) {
        FruitFactory ff = new NorthFruitFactory();
        Fruit apple = ff.getApple();
        apple.get();
        
        Fruit banana = ff.getBanana();
        banana.get();
        
        FruitFactory ff2= new SouthFruitFactory();
        Fruit apple2 = ff2.getApple();
        apple2.get();
        
        Fruit banana2 = ff2.getBanana();
        banana2.get();
        
        FruitFactory ff3 = new WenshiFruitFactory();
        Fruit apple3 = ff3.getApple();
        apple3.get();
        
        Fruit banana3 = ff3.getBanana();
        banana3.get();
    }
}

二、模式中包含的角色及其职责

1.抽象工厂(Creator)角色
抽象工厂模式的核心,包含对多个产品结构的声明,任何工厂类都必须实现这个接口。

2.具体工厂( Concrete  Creator)角色
具体工厂类是抽象工厂的一个实现,负责实例化某个产品族中的产品对象。

3.抽象(Product)角色
抽象模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。

4.具体产品(Concrete Product)角色
抽象模式所创建的具体实例对象
总结:抽象工厂中方法对应产品结构,具体工厂对应产品族。

原文地址:https://www.cnblogs.com/LT0314/p/3894464.html