美文网首页Android开发经验谈Android开发Android开发
创建型设计模式——抽象工厂模式

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

作者: 程序员丶星霖 | 来源:发表于2019-01-23 09:24 被阅读2次

《Android源码设计模式解析与实战》读书笔记(六)
《Android源码设计模式解析与实战》PDF资料下载

一、抽象工厂模式简介

1.1、定义

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

1.2、使用场景

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

二、抽象工厂方法模式的简单实现

public abstract class CarFactory {

    /**
     * 生产轮胎
     * @return
     */
    public abstract ITire createTire();

    /**
     * 生产发动机
     * @return
     */
    public abstract IEngine createEngine();

    /**
     * 生产制动系统
     * @return
     */
    public abstract IBrake createBrake();
}

为每一种零部件产品定义一个接口

public interface ITire {
    /**
     * 轮胎
     */
    void tire();
}
public class NormalTire implements ITire {
    @Override
    public void tire() {
        System.out.println("普通轮胎");
    }
}
public class SUVTire implements ITire {

    @Override
    public void tire() {
        System.out.println("越野轮胎");
    }
}
public interface IEngine {
    /**
     * 发动机
     */
    void engine();
}
public class DomesticEngine implements IEngine {
    @Override
    public void engine() {
        System.out.println("国产发动机");
    }
}
public class ImportEngine implements IEngine {
    @Override
    public void engine() {
        System.out.println("进口发动机");
    }
}
public interface IBrake {
    /**
     * 制动系统
     */
    void brake();
}
public class NormalBrake implements IBrake {
    @Override
    public void brake() {
        System.out.println("普通制动");
    }
}
public class SeniorBrake implements IBrake {
    @Override
    public void brake() {
        System.out.println("高级制动");
    }
}
//Q3工厂类
public class Q3Factory extends CarFactory {
    @Override
    public ITire createTire() {
        return new NormalTire();
    }

    @Override
    public IEngine createEngine() {
        return new DomesticEngine();
    }

    @Override
    public IBrake createBrake() {
        return new NormalBrake();
    }
}
//Q7工厂类
public class Q7Factory extends CarFactory {
    @Override
    public ITire createTire() {
        return new SUVTire();
    }

    @Override
    public IEngine createEngine() {
        return new ImportEngine();
    }

    @Override
    public IBrake createBrake() {
        return new SeniorBrake();
    }
}
//构造一个生产Q3的工厂
CarFactory factoryQ3 = new Q3Factory();
factoryQ3.createTire().tire();
factoryQ3.createEngine().engine();
factoryQ3.createBrake().brake();

System.out.println("-----------------------------------------------------");

CarFactory factoryQ7 = new Q7Factory();
factoryQ7.createTire().tire();
factoryQ7.createEngine().engine();
factoryQ7.createBrake().brake();

输出如下:

抽象工厂.png

三、总结

3.1、优点

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

3.2、缺点

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

学海无涯苦作舟

我的微信公众号

相关文章

网友评论

    本文标题:创建型设计模式——抽象工厂模式

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