美文网首页
工厂模式

工厂模式

作者: 魔焰之 | 来源:发表于2019-06-21 08:21 被阅读0次

定义

工厂模式属于创建类型模式的一种,主要适用于创建多个简单对象。
其最初的设计中,包含如下角色:
抽象产品角色:它一般是具体产品继承的父类或者实现的接口
具体产品:需要生成的目标对象
产品工厂:负责根据传入的标志生成相应的产品对象
工厂模式中分为三种实现,简单工厂,工厂方法和抽象工厂,随着产品和工厂的关系解偶而逐步降低类之间的耦合度,后面会详细解释相应的实现

简单工厂

public class BMWCar extends Car {
    @Override
    void createWheel() {}

    @Override
    void createEngine() { }

    @Override
    void createElectricalEquipment() {}

    @Override
    void createBody() {}
}
public class JeepCar extends Car {
    @Override
    void createWheel() {}

    @Override
    void createEngine() {}

    @Override
    void createElectricalEquipment() {}

    @Override
    void createBody() {}
}
/**
     * 访问入口
     * 当新增一个车种时必然会修改当前工厂方法
     */
    public static Car createCar(int type){
        switch (type){
            case 1:
                return new BMWCar();
            case 2:
                default:
                    return new JeepCar();
        }
    }

上述三个类就构成了一个简单工厂,可以发现其就是简单的满足了定义的三个基本角色:抽象产品+实际产品+工厂,这样的方式隐藏者工厂和产品的强耦合关系(依赖具体的实现类型),即工厂的生产能力是固定的,目前只能生产BMWCar和JeepCar,如果需要生产其他产品,则需要改动createCar方法。当然,简单工厂是可以使用反射来清除强耦合关系的,适当情景下可以采用反射来实现。

工厂方法

public abstract class FactoryCar {
    abstract Car create();
}
public class JeepFacory extends FactoryCar {
    @Override
    Car create() {
        return new JeepCar();
    }
}
public class BMWFactory extends FactoryCar {
    @Override
    Car create() {
        return new BMWCar();
    }
}

上述是工厂方法模式的简单实例,其中出现的四个角色分别是抽象产品+实现产品+抽象工厂+实现工厂,工厂方法和简单工厂的区别就是抽离了工厂角色,将工厂和产品从1:n变成了1:1,优点是隔离了工厂之间的联系,新增产品时不需要改动原有的工厂类和产品类,缺点是每次新增产品都需要新增相应的工厂,导致会出现很多类。像Glide库中就大量使用了该模式,导致其存在大量的工厂,一不小心你就找错了具体的工厂。

抽象工厂

public abstract class AbstractFactory {
    abstract Engine createEngine();
    abstract Wheel createWheels();
}
public class BMWFactoryImpl extends AbstractFactory {
    @Override
    Engine createEngine() {
        return new Engine() {};
    }

    @Override
    Wheel createWheels() {
        return new Wheel() {};
    }
}

上述是一个简单的抽象工厂,讲述了每个具体的工厂可以提供不同型号的汽车配件。其中已经没有车这个概念了,对应的车被细化分解了,至此你会发现,工厂模式的演变之路:
1.工厂和产品强耦合,
2.解偶工厂和产品的关系,工厂单一职责
3.细分产品模块,工厂提供单一功能的组件,客户端来组装

总结

使用设计模式的时候,关键还是看我们抽象化的能力和留有余地的能力,当侧重点不同时其抽象的方向可能也会有出入,比如车的行为和属性是非常多的,而且其实在不断变化的,现有的抽象可能满足不了变化,所以需要给自己留下变化的余地。

相关文章

  • 常用设计模式

    设计模式 工厂模式 工厂模式思路上分:简单工厂模式,工厂模式, 抽象工厂模式// 抽象工厂模式可以代替工厂模式,做...

  • 工厂模式

    工厂模式细分三种:简单工厂模式、工厂模式、抽象工厂模式。 工厂模式相当于抽象了简单工厂模式的工厂类,而抽象工厂模式...

  • 工厂模式

    工厂模式 就是工厂---生产-->产品 在设计模式中,分为 简单工厂模式, 工厂方法模式,抽象工厂模式. 工厂模式...

  • 找女朋友之简单工厂模式,工厂模式,抽象工厂模式

    找女朋友之简单工厂模式,工厂模式,抽象工厂模式 找女朋友之简单工厂模式,工厂模式,抽象工厂模式

  • 【设计模式】- 工厂模式

    工厂模式分为三种:简单工厂模式、工厂方法模式和抽象工厂模式。 工厂模式:靠工厂生产对象 简单工厂模式中只有一个工厂...

  • 工厂模式

    工厂模式包含三种模式:简单工厂模式、工厂方法模式和抽象工厂模式。 简单工厂模式 定义简单工厂模式:由一个工厂类根据...

  • Java设计模式——工厂模式

    工厂模式简单工厂模式工厂方法模式抽象工厂模式 1.简单工厂模式 1.基本介绍1)简单工厂模式也叫静态工厂模式,是属...

  • 设计模式-3种工厂模式

    工厂模式包括:简单工厂模式,工厂方法模式,抽象工厂模式 简单工厂模式 工厂方法根据参数直接创建实例:工厂->产品 ...

  • 设计模式-工厂模式

    工厂模式概念 实例化对象,用工厂方法代替new操作。工厂模式包括工厂方法模式和抽象工厂模式。抽象工厂模式是工厂模式...

  • 第一章2.0工厂- 基础类准备

    2.1工厂-简单工厂模式2.2工厂-工厂方法模式2.3工厂-抽象工厂模式

网友评论

      本文标题:工厂模式

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