美文网首页Android 成长笔记
Android 源码设计模式解析与实战 读书笔记 6 抽象工厂模

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

作者: 赵者也 | 来源:发表于2018-03-20 19:53 被阅读2次

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

    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();
        }
    }
    

    总结

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

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

    相关文章

      网友评论

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

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