设计模式-工厂模式

Posted vinlen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式-工厂模式相关的知识,希望对你有一定的参考价值。

首先,需要了解一下java设计模式6大原则中的开闭原则:只对 拓展开放,修改关闭。也就是你可以继承我的类来进行拓展,但不能重写我的方法。

如果将方法比喻为工厂,对象成为产品,工厂模式就是调用固定的方法来创建固定的对象,但是如果想添加新产品的时候会违反开闭原则。所以要将工厂方法和产品抽象化,添加新产品的时候不用修改原来的代码,也不用违反开闭原则。单一工厂生产单一产品,共同实现公共接口

公共抽象工厂来生产产品

abstract class Factory {
    public abstract Product produce();
}

公共抽象产品类

abstract class Product {
    public abstract  void work();
}

具体产品A

public class ProductA extends Product {
    @Override
    public void work() {
        System.out.println("生产第一种商品");
    }
}

具体工厂1生产产品A

public class FactoryA extends Factory {
    @Override
    public Product produce() {
        return new ProductA();
    }
}

具体产品B

public class ProductB extends Product {
    @Override
    public void work() {
        System.out.println("生产第二种商品");
    }
}

具体工厂B来生产产品B

public class FactoryB extends Factory {
    @Override
    public Product produce() {
        return new ProductB();
    }
}

测试类

public class Client {
    public static void main(String[] args) {
       //生产A产品
        FactoryA factoryA = new FactoryA();
        factoryA.produce().work();
       //生产B产品
        FactoryB factoryB = new FactoryB();
        factoryB.produce().work();
    }
}

在将工厂和产品都抽象化之后 好处和坏处是显而易见的

好处:真正满足了开闭原则,添加新产品只需要继承公共工厂类和公共产品类,无需修改公共类,单一职业,每个工厂只负责生产对应的产品

坏处:耦合度高了,如果产品变化,生产它的对应工厂代码也可能变化,而且代码是成对增加的。

应用场景:创建对象时不需要知道具体的类名,只需要委托给对应的工厂,创建好对象后可以再动态指定类型,

 


 

以上是关于设计模式-工厂模式的主要内容,如果未能解决你的问题,请参考以下文章

设计模式学习——简单工厂模式工厂模式抽象工厂模式

设计模式简单工厂模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )

设计模式学习——简单工厂模式工厂模式抽象工厂模式

设计模式工厂方法模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )

设计模式-简单工厂工厂方法模式抽象工厂模式详解

设计模式---工厂模式