Java设计模式 - 创建型模式 - 抽象工厂方法模式

    xiaoxiao2022-07-02  124

    介绍

    抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。

    优缺点

    优点:

    当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象。

    缺点:

    产品族扩展非常困难,要增加一个系列的某一产品,既要在抽象的 Creator 里加代码,又要在具体的里面加代码。

    使用场景

    1、QQ 换皮肤,一整套一起换。 2、生成不同操作系统的程序。

    举例

    一个奥迪造车工厂生产Q3、Q5和Q7,虽然属于一个车系,但是三者之间零部件差别却很大,比如Q3和Q7的发动机、轮胎、制动系统都不同。这时候就需要将抽象工厂模式应用到其中。 首先,为每一种零部件产品定义一个接口,并分别创建两个不同的实现类表示不同的零部件产品。 轮胎相关类

    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("高级制动"); } }

    车工厂相关类

    public abstract class CarFactory { /** * 生产轮胎 * @return */ public abstract ITire createTire(); /** * 生产发动机 * @return */ public abstract IEngine creatEngine(); /** * 生产制动系统 * @return */ public abstract IBrake createBrake(); } public class Q3Factory extends CarFactory { @Override public ITire createTire() { return new NormalTire(); } @Override public IEngine creatEngine() { return new DomesticEngine(); } @Override public IBrake createBrake() { return new NormalBrake(); } } public class Q7Factory extends CarFactory { @Override public ITire createTire() { return new SUVTire(); } @Override public IEngine creatEngine() { return new ImportEngine(); } @Override public IBrake createBrake() { return new SeniorBrake(); } }

    客户类

    public class Client { public static void main(String[] args) { CarFactory factoryQ3 = new Q3Factory(); factoryQ3.createTire().tire(); factoryQ3.creatEngine().engine(); factoryQ3.createBrake().brake(); CarFactory factoryQ7 = new Q7Factory(); factoryQ7.createTire().tire(); factoryQ7.creatEngine().engine(); factoryQ7.createBrake().brake(); } }
    最新回复(0)