美文网首页程序员Java设计模式
设计模式系列-抽象工厂模式

设计模式系列-抽象工厂模式

作者: 特立独行的猪手 | 来源:发表于2017-03-31 10:54 被阅读132次

JAVA设计模式系列:

抽象工厂模式

定义

抽象工厂模式是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。在抽象工厂中,接口是负责创建相关对象的工厂,不需要显示指定他们的类。提供了一种创建对象的最佳方式。

角色

  • 抽象工厂类:具体工厂必须实现或继承的父类,在Java中可以用抽象类或者接口实现。

  • 具体工厂类:负责创建具体对象的类,包含具体的业务逻辑。

  • 抽象产品类:工厂类所创建对象实例的父类。

  • 具体产品类:工厂类创建的具体对象实例。

实现

这里简单写一个示例来实现抽象工厂模式。

类图

  • 这个类图描述的是抽象产品类与具体产品类之间的关系,从图中我们可以看出我们分别有IOrangeIApple两个接口,每个接口都有对应2个具体的实现类CNOrangeUSOrangeUSAppleCNApple。这里就构成了我们的抽象产品类与具体产品类。
  • 这个类图描述抽象工厂类与具体工厂类之间的关系。抽象工厂类AbstractFactory分别有2个方法getApplegetOrange,交于具体工厂类CNFactoryUSFactory实现具体逻辑。

抽象产品类

public interface IApple {

    void get();
}

public interface IOrange {

    void get();
}

具体产品类

public class CNApple implements IApple {

    public void get() {
        System.out.println("我是中国苹果。");
    }
}

public class CNOrange implements IOrange {

    public void get() {
        System.out.println("我是中国橙子。");
    }
}

public class USApple implements IApple {

    public void get() {
        System.out.println("我是美国苹果。");
    }
}

public class USOrange implements IOrange {

    public void get() {
        System.out.println("我是美国橙子。");
    }
}

定义了4个具体对象实例类。

抽象工厂类

public interface AbstractFactory {

    IApple getApple();

    IOrange getOrange();
}

具体工厂类

public class USFactory implements AbstractFactory {

    public IApple getApple() {
        return new USApple();
    }

    public IOrange getOrange() {
        return new USOrange();
    }

}

public class CNFactory implements AbstractFactory {
    public IApple getApple() {
        return new CNApple();
    }

    public IOrange getOrange() {
        return new CNOrange();
    }
}

测试

    public static void main(String[] args) {
            AbstractFactory usFactory = new USFactory();
    
            AbstractFactory cnFactory = new CNFactory();
    
            usFactory.getApple().get();
            usFactory.getOrange().get();
    
            cnFactory.getApple().get();
            cnFactory.getOrange().get();

    }

运行结果:

我是美国苹果。
我是美国橙子。
我是中国苹果。
我是中国橙子。

总结

  • 优点:可以将一个系列的产品族统一到一起创建;

  • 缺点:在产品族中扩展新的产品是很困难的,它需要修改抽象工厂的接口;

JAVA设计模式系列:

相关文章

  • 设计模式四、抽象工厂模式

    系列传送门设计模式一、单例模式设计模式二、简单工厂模式设计模式三、工厂模式设计模式四、抽象工厂模式 抽象工厂模式 ...

  • 设计模式系列-抽象工厂模式

    JAVA设计模式系列: 单例模式 观察者模式 模板方法模式 简单工厂模式 抽象工厂模式 抽象工厂模式 定义 抽象工...

  • iOS设计模式(3)适配器模式

    设计模式系列文章 《iOS设计模式(1)简单工厂模式》《iOS设计模式(2)工厂模式》《iOS设计模式(4)抽象工...

  • 设计模式三、工厂模式

    系列传送门设计模式一、单例模式设计模式二、简单工厂模式设计模式三、工厂模式设计模式四、抽象工厂模式 工厂模式 在一...

  • iOS设计模式(1)简单工厂模式

    设计模式系列文章 《iOS设计模式(2)工厂模式》《iOS设计模式(3)适配器模式》《iOS设计模式(4)抽象工厂...

  • iOS设计模式(三)之抽象工厂模式

    设计模式系列传送门 iOS设计模式(一)之简单工厂模式iOS设计模式(二)之工厂模式iOS设计模式(三)之抽象工厂...

  • iOS设计模式(一)之简单工厂模式

    设计模式系列传送门 iOS设计模式(一)之简单工厂模式iOS设计模式(二)之工厂模式iOS设计模式(三)之抽象工厂...

  • iOS设计模式(二)之工厂模式

    设计模式系列传送门 iOS设计模式(一)之简单工厂模式iOS设计模式(二)之工厂模式iOS设计模式(三)之抽象工厂...

  • 设计模式一、单例模式

    系列传送门设计模式一、单例模式设计模式二、简单工厂模式设计模式三、工厂模式设计模式四、抽象工厂模式 简单单例(推荐...

  • Java设计模式系列-抽象工厂模式

    原创文章,转载请标注出处:《Java设计模式系列-抽象工厂模式》 一、概述 抽象工厂模式是对工厂方法模式的再升级,...

网友评论

    本文标题:设计模式系列-抽象工厂模式

    本文链接:https://www.haomeiwen.com/subject/gigmottx.html