定义:

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

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

  它不属于 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();
}
}

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

  1. 【Unity3D与23种设计模式】工厂方法模式(Factory Method)

    GoF中定义: "定义一个可以产生对象的接口,但是让子类决定要产生哪一个类的对象.工厂方法模式让类的实例化程序延迟到子类中实施" 当类的对象产生时,若出现下列情况: 1.需要复杂的 ...

  2. 二十四种设计模式:工厂方法模式(Factory Method Pattern)

    工厂方法模式(Factory Method Pattern) 介绍定义一个用于创建对象的接口,让子类决定将哪一个类实例化.Factory Method使一个类的实例化延迟到其子类. 示例有SqlMes ...

  3. java23种设计模式——四、原型模式

    源码在我的github和gitee中获取 目录 java23种设计模式-- 一.设计模式介绍 java23种设计模式-- 二.单例模式 java23种设计模式--三.工厂模式 java23种设计模式- ...

  4. java23种设计模式——八、组合模式

    目录 java23种设计模式-- 一.设计模式介绍 java23种设计模式-- 二.单例模式 java23种设计模式--三.工厂模式 java23种设计模式--四.原型模式 java23种设计模式-- ...

  5. java23种设计模式——七、桥接模式

    原文地址:https://www.cnblogs.com/chenssy/p/3317866.html 源码在我的github和gitee中获取 目录 java23种设计模式-- 一.设计模式介绍 j ...

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

    一.概念:定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类. 二.代码实现 namespace 设计模式之工厂方法模式 { /// <summary&g ...

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

    C#设计模式(3)——工厂方法模式   一.引言 在简单工厂模式中讲到简单工厂模式的缺点,有一点是——简单工厂模式系统难以扩展,一旦添加新产品就不得不修改简单工厂方法,这样就会造成简单工厂的实现逻辑过 ...

  8. java23种设计模式——五、建造者模式

    源码在我的github和gitee中获取 目录 java23种设计模式-- 一.设计模式介绍 java23种设计模式-- 二.单例模式 java23种设计模式--三.工厂模式 java23种设计模式- ...

  9. 乐在其中设计模式(C#) - 工厂方法模式(Factory Method Pattern)

    原文:乐在其中设计模式(C#) - 工厂方法模式(Factory Method Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 工厂方法模式(Factory Method Pa ...

随机推荐

  1. Python的模块,模块的使用、安装,别名,模块作用域

    模块和包 所谓的模块就是将不同功能的函数分别放到不同的文件中,这样不仅有利于函数的维护,也方便了函数的调用.在Python中,一个.py文件就是一个模块(Module). 在模块的上层有一个叫做包(P ...

  2. Dp优化之决策单调栈优化

    证明:g(i) ≤ g(j)   (i ≤ j) 令 d=g(i) , k<d , 设cut = x表示 f(i) = f(x) + w[x,i]    ( x < i ) 构造一个式子: ...

  3. hdu4283

    You Are the One Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  4. A·F·O小记

    看过很多的游记,也看过很多的退役记.回忆录,而当自己真正去面对的那一刻,却又不知道从何说起,也不知道能用怎样的形式和语言,才能把这段珍贵的记忆封存起来,留作青春里的一颗璀璨明珠…… 还是随便写写吧…… ...

  5. openfoam变热物性参数的设置【转载】

    转载自:http://blog.sina.com.cn/s/blog_9de422500102va73.html 物性参数在constant/thermophysicalProperties文件中设置 ...

  6. sql server 发布订阅

    [配置] 一. 发布方 复制 >> 如果有问题 C:\Windows\System32\drivers\etc hosts: 127.0.0.1 ?? 二. 订阅方 订阅方设置结束 三. ...

  7. 记录一次腾讯X5内核64位手机初始化失败

    之前一直在使用x5内核,只需要一个jar包和so文件就能让webview实现多余原生webview的水平,在32位的手机上能够正常运行,但是到了64位手机上就报如下错误: E/ERROR:: .... ...

  8. T-MAX—项目系统设计与数据库设计

    团队作业第四次-项目系统设计与数据库设计 这个作业属于哪个课程 2019秋福大软件工程实践Z班 这个作业要求在哪里 团队作业第四次-项目系统设计与数据库设计 团队名称 T-MAX 这个作业的目标 在开 ...

  9. SQL-W3School-函数:SQL MAX() 函数

    ylbtech-SQL-W3School-函数:SQL MAX() 函数 1.返回顶部 1. MAX() 函数 MAX 函数返回一列中的最大值.NULL 值不包括在计算中. SQL MAX() 语法 ...

  10. 【转载】 AutoML相关论文

    原文地址: https://www.cnblogs.com/marsggbo/p/9308518.html ---------------------------------------------- ...