美文网首页
Java设计模式之「工厂模式」

Java设计模式之「工厂模式」

作者: 乌木山 | 来源:发表于2019-11-30 14:50 被阅读0次

工厂方法是创建类设计模式(creational patterns)中的一种常见设计模式。工厂模式又可以细分为简单工厂工厂方法抽象工厂模式。

工厂模式的目标是:简化并封装对象创建过程,使得使用者只需要按需调用创建方法即可,而无需关注具体创建过程。

工厂模式中,涉及两个关键角色:工厂产品

简单工厂

该模式中,只有一个具体的工厂。工厂根据入参参数,返回不同的具体产品。
该模式的缺点是:如果要新增一个产品实现,就必须对工厂进行修改,这违反了设计模式中的开闭原则。

public abstract class Car {
}
public class BMW3Car extends Car {
}
public class BMW5Car extends Car {
}

public class BMWFacotry {

    public Car createCar(int tpye) {
        switch (tpye) {
            case 3:
                return new BMW3Car();
            case 5:
                return new BMW5Car();
            default:
                throw new UnsupportedOperationException();
        }
    }
}
public class App {
    public static void main(String[] args) {
        BMWFacotry bmwFacotry = new BMWFacotry();

        bmwFacotry.createCar(3);
        bmwFacotry.createCar(5);
    }
}
简单工厂模式

工厂方法

为了解决简单工厂模式中的问题,工厂方法模式将工厂也进行抽象。不同的工厂实现,生产不同的产品。每个工厂只负责生产一种具体的产品。这样如果需要新增一个产品生产,只需要新增一个工厂实现进行生产即可。
工厂方法可能引发的一个问题是,随着产品的增多,抽象工厂实现类的数量也会随之增加。

public abstract class AbstractBMWFacotry {
    public abstract Car createCar();
}
public class BMW3Factory extends AbstractBMWFacotry {
    public Car createCar() {
        return new BMW3Car();
    }
}
public class BMW5Factory extends AbstractBMWFacotry {
    public Car createCar() {
        return new BMW5Car();
    }
}
public class App {
    public static void main(String[] args) {

        new BMW3Factory().createCar();
        new BMW5Factory().createCar();
    }
}
工厂方法.png

抽象工厂

抽象工厂和工厂方法模型基本一致,唯一的区别就是抽象工厂模式,一个工厂可以生产多种产品,而工厂方法只生产一种产品。

public abstract class Car {
    private Wheel wheel;

    public void setWheel(Wheel wheel) {
        this.wheel = wheel;
    }
}
public class BMW3Car extends Car {
}
public class BMW5Car extends Car {
}

public abstract class AbstractBMWCombineFacotry {
    public abstract Car createCar();
    public abstract Wheel createWheel();
}
public class BMW3CombineFacotry extends AbstractBMWCombineFacotry {
    public Car createCar() {
        Car bmw3 = new BMW3Car();
        bmw3.setWheel(createWheel());
        return bmw3;
    }

    public Wheel createWheel() {
        return new NormalWheel();
    }
}
public class BMW5CombineFacotry extends AbstractBMWCombineFacotry {
    public Car createCar() {
        Car bmw5 = new BMW5Car();
        bmw5.setWheel(createWheel());
        return bmw5;
    }

    public Wheel createWheel() {
        return new AdvancedWheel();
    }
}

相关文章

  • 工厂模式

    java设计模式-工厂模式 工厂模式: 工厂模式是java设计模式里最常用的设计模式之一。 工厂模式属于创建型模式...

  • Java与模式

    《JAVA与模式》之简单工厂模式《JAVA与模式》之工厂方法模式《JAVA与模式》之抽象工厂模式

  • Java设计模式教程

    Java设计模式教程 Java工厂设计模式 Java抽象工厂模式 Java单例模式 Java建造者(Builder...

  • 代码段简单学习设计模式 -- 抽象工厂模式

    《JAVA与模式》之抽象工厂模式 大话设计模式 抽象工厂模式(Abstraci Factory): 提供一个创...

  • iOS设计模式(三)之抽象工厂模式

    设计模式系列传送门 iOS设计模式(一)之简单工厂模式iOS设计模式(二)之工厂模式iOS设计模式(三)之抽象工厂...

  • iOS设计模式(一)之简单工厂模式

    设计模式系列传送门 iOS设计模式(一)之简单工厂模式iOS设计模式(二)之工厂模式iOS设计模式(三)之抽象工厂...

  • iOS设计模式(二)之工厂模式

    设计模式系列传送门 iOS设计模式(一)之简单工厂模式iOS设计模式(二)之工厂模式iOS设计模式(三)之抽象工厂...

  • java设计模式

    一、《JAVA与模式》之工厂方法模式 二、《JAVA与模式》之抽象工厂模式 三、《JAVA与模式》之单例模式 四、...

  • 工厂模式(Factory Pattern)

    大话设计模式之陈狗养猪记_工厂模式 概念: 工厂模式(Factory Pattern)是 Java 中最常用的...

  • 设计模式 - 工厂模式

    概述 我们都知道Java中共有 23 种设计模式,其中工厂模式分为三种,即:简单工厂模式(不在 23 种设计模式之...

网友评论

      本文标题:Java设计模式之「工厂模式」

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