java23种设计模式之八: 工厂方法模式

定义:

  定义一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子工厂类当中。这满足创建型模式中所要求的“创建与使用相分离”的特点。

  我们把被创建的对象称为“产品”,把创建产品的对象称为“工厂”。如果要创建的产品不多,只要一个工厂类就可以完成,这种模式叫“简单工厂模式”,

  它不属于 GoF 的 23 种经典设计模式,它的缺点是增加新产品时会违背“开闭原则”。

优点:

  用户只需要知道具体工厂的名称就可得到所要的产品,无须知道产品的具体创建过程;

  在系统增加新的产品时只需要添加具体产品类和对应的具体工厂类,无须对原工厂进行任何修改,满足开闭原则;

缺点:

  每增加一个产品就要增加一个具体产品类和一个对应的具体工厂类,这增加了系统的复杂度。

结构:

  抽象工厂(Abstract Factory):提供了创建产品的接口,调用者通过它访问具体工厂的工厂方法 createProduct() 来创建产品。

  具体工厂(ConcreteFactory):主要是实现抽象工厂中的抽象方法,完成具体产品的创建。

  抽象产品(Product):定义了产品的规范,描述了产品的主要特性和功能。

  具体产品(ConcreteProduct):实现了抽象产品角色所定义的接口,由具体工厂来创建,它同具体工厂之间一一对应。

总述:

  对于工厂方法其实就是让工厂生产产品,只不过我们把这个向上提取一下,我们以汽车为例,汽车厂肯定是生产汽车的,但是不同的汽车厂生产的汽车和型号不同,那我们就可以把这个工厂抽象一下,汽车工厂都是生产汽车的,具体哪一种车我们不知道,因此,我们把抽象工厂生产出来的车也是抽象的车,都拥有可以在路上跑的功能。然后,我们该造具体的车了,很简单,我们把具体的汽车品牌实现抽象出来的车就可以,因为具体的车也拥有在路上跑的功能,那这个车可以是奥迪、宝马、奔马等等。既然有了具体的汽车品牌,那我们可以让具体的工厂来造车,因此我们可以让奥迪汽车厂专门造奥迪,宝马专门造宝马,那么我们让具体的工厂实现之前抽象出来的工厂,这样,我们就可以让自家的汽车车生产自家的汽车。

其实就是:具体的工厂生产具体的产品,让调用者无须参与创建过程。

就像你买车一样,你会找到自己看中的品牌、车型,买下即可,但你不会参与整个生产过程一样

//抽象工厂public interface AbstractFactory {
    AbstractProductCar createProducet();
}
//抽象产品
public interface AbstractProductCar {
    void run();
}
//具体产品
public class AudiCar implements AbstractProductCar{
    @Override
    public void run() {
        System.out.println("奥迪车在路上跑。。。。。。");
    }

}
//具体产品
public class BMWCar implements AbstractProductCar{
    @Override
    public void run() {
        System.out.println("宝马车在路上跑。。。。。。");
    }

}
//具体工厂
public class AudiCarFactory implements AbstractFactory{
    @Override
    public AbstractProductCar createProducet() {
        return new AudiCar();
    }
}
//具体工厂
public class BMWCarFactory implements AbstractFactory{
    @Override
    public AbstractProductCar createProducet() {
        return new BMWCar();
    }
}
//测试类
public class MainTest {
    public static void main(String[] args) {
        AbstractFactory bmwFactory = new BMWCarFactory();
        bmwFactory.createProducet().run();

        AbstractFactory audi = new AudiCarFactory();
        audi.createProducet().run();
    }
}

原文地址:https://www.cnblogs.com/MrRightZhao/p/11638594.html

时间: 2024-10-11 21:07:31

java23种设计模式之八: 工厂方法模式的相关文章

23种设计模式(1) - 工厂方法模式

1.定义 定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法使一个类的实例化延迟到其子类. 2.举例 有一个Animal接口,有两个类Dog和Cat分别继承了该接口.我们通过一个叫AnimalDactory的工厂类接口,再定义DogFactory和CatFactory类来分别创建Dog和Cat实例,由调用端来决定使用哪个工厂来创建对象. 3.代码 // 创建 动物 接口 public interface Animal { void sayName(); } // 创建 猫和狗 类 p

23种设计模式之工厂方法模式

工厂方法模式(Factory Method):定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法使一个类的实例化延迟到其子类. package designMode.factoryMethod; interface IProduct { void function1(); void function2(); void function3(); } package designMode.factoryMethod; class Product1 implements IProduct{

设计模式之工厂方法模式

anticipate 预料 = except ant蚂蚁 ic ic卡 ip ip卡 ate吃 我没有预料到小蚂蚁把我的ic,ip卡吃掉了. robust 强壮的 = strong ro rong容祖儿  bu不  st石头 容祖儿不喜欢强壮的石头. maintain 维持 = keep main主要的(大陆)  tain 台湾 大陆和台湾维持着若即若离的关系. 设计模式之工厂方法模式 动机:     一个工厂方法factory method定义了一个接口来创建对象,但是让子类去选择创建哪一个,

每天一个设计模式-5 工厂方法模式

每天一个设计模式-5 工厂方法模式 1.模式定义 定义一个用于创建对象的接口,让子类决定实例化那一个类,Factory Method使一个类的实例化延迟到其子类. 2.工厂方法模式解决问题的思路 工厂方法模式需要接口对象,那就定义一个方法来创建这个接口对象(工厂方法):可是事实上它自己是不知道如何创建这个接口对象的,没有关系,定义成抽象方法让子类来实现就可以了:这样这个对象本身就可以只是面向接口编程,而无需关心到底如何创建接口对象了. 3.实际问题 实现一个导出数据的功能,客户选择数据的导出格式

C#设计模式(3)——工厂方法模式

一.概念:定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类. 二.代码实现 namespace 设计模式之工厂方法模式 { /// <summary> /// 菜抽象类 /// </summary> public abstract class Food { // 输出点了什么菜 public abstract void Print(); } /// <summary> /// 西红柿炒鸡蛋这道菜 /// </summary

03.设计模式_工厂方法模式

转载自:http://www.cnblogs.com/zhili/p/FactoryMethod.html 一.引言 在简单工厂模式中讲到简单工厂模式的缺点,有一点是--简单工厂模式系统难以扩展,一旦添加新产品就不得不修改简单工厂方法,这样就会造成简单工厂的实现逻辑过于复杂,然而本专题介绍的工厂方法模式可以解决简单工厂模式中存在的这个问题,下面就具体看看工厂模式是如何解决该问题的. 二.工厂方法模式的实现 工厂方法模式之所以可以解决简单工厂的模式,是因为它的实现把具体产品的创建推迟到子类中,此时

Java设计模式之工厂方法模式(转) 实现是抽象工厂?

Java设计模式之工厂方法模式 责任编辑:覃里作者:Java研究组织   2009-02-25   来源:IT168网站 文本Tag: 设计模式 Java [IT168 技术文章]          一 .工厂方法(Factory Method)模式 工厂方法模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中.核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色

【设计模式】——工厂方法模式

工厂方法模式(Factory Method),定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法使用一个类的实例化延迟到其子类.根据依赖倒转原则,我们把工厂类抽象出一个接口,这个接口只有一个方法,就是创建抽象产品的工厂方法.然后,所有的要生产具体类的工厂,就去实现这个接口,这样,一个简单工厂模式的工厂类,变成了一个工厂抽象接口和多个具体生成对象的工厂.我们在要增加新的功能,就不需要更改原有的工厂类了,只需要增加此功能的运算类和相应的工厂类就可以了.这样整个工厂和产品系其实都没有修改的

【大话设计模式】—— 工厂方法模式

一.概念 想象一下我们的寻常见到的工厂,下一个订单,付了订金,一段时间后就能够提货.我们不须要知道工厂是用的什么机器,怎么安排工人的,从哪来的材料,只须要一个订单就好,工厂就能够依照其固定流水线做出我们所须要的产品.设计模式中也有类似的一个大神:工厂方法模式. 以下让我们来认识一下: 工厂方法模式(Factory Method):定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法使一个类的实例化延迟到其子类. 二.UML图 Product(抽象产品) ConcreteProduct(