Android 源码设计模式解析与实战 读书笔记 6 抽象工厂模式

创建型设计模式 —— 抽象工厂模式

1. 抽象工厂模式介绍

抽象工厂模式(Abstract Factory Pattern),也是创建型设计模式之一。

2. 抽象工厂模式的定义

为创建一组相关或者是相互依赖的对象提供一个接口,而不需要指定它们的具体类。

3. 抽象工厂模式的使用场景

一个对象族有相同的约束时可以使用抽象工厂模式。举个例子,Android、iOS、Windows Phone 下都有短信和拨号软件,两者都属于软件的范畴,但是,它们所在的操作系统平台不一样,即便是同一家公司出品的软件,其代码的实现逻辑也是不同的,这个时候就可以考虑使用抽象工厂方法模式来产生 Android、iOS、Windows Phone 下的短信和拨号软件。

4. 抽象工厂模式的通用模式代码

简单的实例:

// 抽象产品类 A
public abstract class AbstractProductA {
    public abstract void method();
}

// 抽象产品类 B
public abstract class AbstractProductB {
    public abstract void method();
}

// 具体产品类 A1
public class ConcreteProductA1 extends AbstractProductA {
    @Override
    public void method() {
        System.out.println("具体产品 A1 的方法");
    }
}

// 具体产品类 A2
public class ConcreteProductA2 extends AbstractProductA {
    @Override
    public void method() {
        System.out.println("具体产品 A2 的方法");
    }
}

// 具体产品类 B1
public class ConcreteProductB1 extends AbstractProductB {
    @Override
    public void method() {
        System.out.println("具体产品 B1 的方法");
    }
}

// 具体产品类 B2
public class ConcreteProductB2 extends AbstractProductB {
    @Override
    public void method() {
        System.out.println("具体产品 B2 的方法");
    }
}

// 抽象工厂类
public abstract class AbstractFactory {

    public abstract AbstractProductA createProductA();

    public abstract AbstractProductB createProductB();
}

// 具体工厂类 1
public class ConcreteFactory1 extends AbstractFactory {
    @Override
    public AbstractProductA createProductA() {
        return new ConcreteProductA1();
    }

    @Override
    public AbstractProductB createProductB() {
        return new ConcreteProductB1();
    }
}

// 具体工厂类 2
public class ConcreteFactory2 extends AbstractFactory {
    @Override
    public AbstractProductA createProductA() {
        return new ConcreteProductA2();
    }

    @Override
    public AbstractProductB createProductB() {
        return new ConcreteProductB2();
    }
}

总结

优点:
抽象工厂模式的一个显著的优点是分离接口与实现,客户端使用抽象工厂来创建需要的对象,而客户端根本就不知道具体的实现是谁,客户端只是面向产品的接口编程而已,使其从具体的产品实现中解耦,同时基于接口与实现的分离,使抽象该工厂方法模式在切换产品类时更加灵活、容易。

缺点:
一是类文件的爆炸性增加,二是太不容易扩展新的产品类,因为每当我们增加一个产品类就需要修改抽象工厂,那么所有的具体工厂类均会被修改。

    原文作者:赵者也
    原文地址: https://www.jianshu.com/p/d6b6be123c71
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞