工厂模式(Factory)
一.分类
工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。
工厂模式主要分为三个,简单工厂模式(Simple Factory)/ 工厂方法模式(Factory Method) / 抽象工厂模式(Abstract Factory)。在某些书中分为两类主要是将简单工厂模式(Simple Factory)看为工厂方法模式的一种特例,两者归为一类。
二.详解
1)简单工厂模式(Simple Factory) 又称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式。在简单工厂模式中,可以根据自变量的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。
(1)工厂类(Creator)角色:担任这个角色的是工厂方法模式的核心,含有与应用紧密相关的商业逻辑。工厂类在客户端的直接调用下创建产品对象,它往往由一个具体Java 类实现。
(2)抽象产品(Product)角色:担任这个角色的类是工厂方法模式所创建的对象的父类,或它们共同拥有的接口。抽象产品角色可以用一个Java 接口或者Java 抽象类实现。
(3)具体产品(Concrete Product)角色:工厂方法模式所创建的任何对象都是这个角色的实例,具体产品角色由一个具体Java 类实现。
/*** 产品类的总接口.*/ public interface Car {void driver(); }public class Coupe implements Car {public void driver() {System.out.println("双门小汽车..."); }}public class Truck implements Car {public void driver() {System.out.println("大货车出发了...."); }}/*** 创建产品的工厂类.*/ public class CarFactory {public static Car CarFactory(String carType) {if(CarType.TRUCK.getValue().equals(carType)){return new Truck();}else if(CarType.COUPE.getValue().equals(carType)){return new Coupe();}return null;} }//------------------------------------------------------------------ // 创建了car enum 方便进行调用 //------------------------------------------------------------------ public enum CarType {/*** 货车.*/TRUCK("TRUCK"),/*** 双门汽车.*/COUPE("COUPE");private final String value;private CarType(String value) {this.value = value; }public String getValue() {return value;} }//------------------------------------------------------------------ // 基于JUNIT 的测试类 //------------------------------------------------------------------public class FactoryTest {@Testpublic void testFactory(){Coupe coupe = (Coupe) CarFactory.CarFactory(CarType.COUPE.getValue());coupe.driver();Truck truck = (Truck)CarFactory.CarFactory(CarType.TRUCK.getValue());truck.driver();} }
运行结果:
简单工厂模式的优缺点
简单工厂模式的优点如下:
(1)工厂类含有必要的判断逻辑,可以决定在什么时候创建哪一个产品类的实例,客户端可以免除直接创建产品对象的责任,而仅仅“消费”产品;简单工厂模式通过这种做法实现了对责任的分割,它提供了专门的工厂类用于创建对象。
(2)客户端无需知道所创建的具体产品类的类名,只需要知道具体产品类所对应的参数即可,对于一些复杂的类名,通过简单工厂模式可以减少使用者的记忆量。
(3)通过引入配置文件,可以在不修改任何客户端代码的情况下更换和增加新的具体产品类,在一定程度上提高了系统的灵活性。
简单工厂模式的缺点如下:
(1)由于工厂类集中了所有产品创建逻辑,一旦不能正常工作,整个系统都要受到影响。
(2)使用简单工厂模式将会增加系统中类的个数,在一定程序上增加了系统的复杂度和理解难度。
(3)系统扩展困难,一旦添加新产品就不得不修改工厂逻辑,在产品类型较多时,有可能造成工厂逻辑过于复杂,不利于系统的扩展和维护。
(4)简单工厂模式由于使用了静态工厂方法,造成工厂角色无法形成基于继承的等级结构。
简单工厂模式的适用环境
(1)工厂类负责创建的对象比较少:由于创建的对象较少,不会造成工厂方法中的业务逻辑太过复杂;
(2)客户端只知道传入工厂类的参数,对于如何创建对象不关心:客户端既不需要关心创建细节,甚至连类名都不需要记住,只需要知道类型所对应的参数。
2)工厂方法模式(Factory Method) :工厂方法模式定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method是一个类的实例化延迟到其子类。在工厂方法模式中,核心的工厂类不再负责所有的产品的创建,而是将具体创建的工作交给子类去做。这个核心类则摇身一变,成为了一个抽象工厂角色,仅负责给出具体工厂子类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节。
工厂方法模式角色
(1) 抽象工厂(Creator)角色:担任这个角色的是工厂方法模式的核心,它是与应用程序无关的。任何在模式中创建对象的工厂类必须实现这个接口。在上面的 系统中这个角色由Java 接口Creator 扮演;在实际的系统中,这个角色也常常使用抽象Java 类实现。
(2) 具体工厂(Concrete Creator)角色:担任这个角色的是实现了抽象工厂接口的具体Java 类。具体工厂角色含有与应用密切相关的逻辑,并 且受到应用程序的调用以创建产品对象。在本系统中给出了两个这样的角色,也就是具体Java 类ConcreteCreator1 和 ConcreteCreator2。
(3)抽象产品(Product)角色:工厂方法模式所创建的对象的超类型,也就是产品对象的共同父类或共同拥有的接口。在本系统中,这个角色由Java 接口Product 扮演;在实际的系统中,这个角色也常常使用抽象Java 类实现。
(4)具体产品(Concrete Product)角色:这个角色实现了抽象产品角色所声明的接口。工厂方法模式所创建的每一个对象都是某个具体产品角色的实例。
产品类介绍
/*** * 这是我们的产品类的总接口,就是说我们的每一辆汽车都会有驾驶的功能*/ public abstract class Car {public abstract void driver(); }/*** 大货车 */ public class BigTruck extends Car { @Overridepublic void driver() {System.out.println("的大货车出发了····");}}public class Bus extends Car {@Overridepublic void driver() {System.out.println("客车开动了 ");}}/*** 小轿车**/ public class Sedan extends Car {@Overridepublic void driver() {System.out.println("小轿车出发了");}}
转载于:https://www.cnblogs.com/hongwz/p/5849815.html
工厂模式(Factory)相关推荐
- 设计模式(一)工厂模式Factory(创建型)
设计模式一 工厂模式Factory 在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的.但是在一些情况下, new操作符直接生成对象会带来一些问题. ...
- 设计模式(四)——工厂模式(Factory Pattern)
工厂模式(Factory Pattern) 意义 工厂模式 实现了创建者和调用者的分离.将实例化对象的代码提取出来,放到一个类中统一管理和维护,达到和主项目的依赖关系的解耦.从而提高项目的扩展和维护性 ...
- 设计模式 - 学习笔记 - 工厂模式Factory Pattern
设计模式 - 学习笔记 - 工厂模式Factory Pattern 1. 简单工厂 1.1 应用场景 1.2 UML 1.3 优劣分析 好处 缺点 1.4 代码示例 抽象产品 AbstractProd ...
- 设计模式-工厂模式 Factory Pattern(简单工厂、工厂方法、抽象工厂)
工厂模式 Factory Pattern(简单工厂.工厂方法.抽象工厂) 工厂模式-创建型模式-提供了创建对象的最佳方式. 在工厂模式中,创建对象时不会对客户端暴露创建逻辑,并且是通过一个共同的接口来 ...
- 设计模式 ~ 创建型模式 ~ 工厂模式 ~ Factory Pattern。
设计模式 ~ 创建型模式 ~ 工厂模式 ~ Factory Pattern. 文章目录 设计模式 ~ 创建型模式 ~ 工厂模式 ~ Factory Pattern. eg. 简单工厂模式. 结构. 优 ...
- [设计模式]工厂模式factory
参考:http://wxg6203.iteye.com/blog/740229 简单工厂模式(simple factory)是类的创建模式,又叫静态工厂方法(static factory method ...
- 一文彻底弄懂工厂模式(Factory)
文章已收录我的仓库:Java学习笔记与免费书籍分享 模式类型 工厂模式属于创建者模式,与对象的创建有关,其中工厂方法模式用于类,而抽象工厂模式用于对象.创建型类模式将对象的部分创建工作延迟到子类,由子 ...
- 设计模式之略见一斑(工厂模式Factory)
在开发中其实我们已经不知道用到了设计模式中的很多模式 ,只是有些我们还未知它具体是哪种模式来着.如工厂模式,单例,适配,外观模式等一些常见模式. 下面是自己学习的一些相关笔记,以做备忘录. 1.工厂模 ...
- Spring模式系列(二) 工厂模式(Factory Pattern) - 理解Spring的第一课
factory pattern在spring的用法 Beanfactory spring框架最依赖的模式,没有之一 这也许是最多程序员使用过的模式之一,我也在我的项目中用过很多次.工厂模式贯穿于整个S ...
- 工厂模式(Factory Patter)
1.工厂模式简介 工厂模式属于创建型模式,是专门用来创建对象的模式,抽象了实例化的过程.工厂模式分为 : 工厂方法模式.抽象工厂模式. 在学习工厂方法模式.抽象工厂之前,首先先要了解一下简单工厂模式, ...
最新文章
- 【网络流】解题报告:luogu P2740 [USACO4.2]草地排水Drainage Ditches(Edmonds-Karp增广路,最大流模板)
- 《深入实践Spring Boot》一第一部分 Part 1基础应用开发
- c++学习总结:extern声明全局变量
- sql server常用函数
- 几个 PHP 的“魔术常量”
- qpython3可视图形界面_PySide——Python图形化界面入门教程(三)
- 基于Flask实现后台权限管理系统 - 表设计
- 深入理解 AMQP 协议
- 为Angular(2+)开发人员提供带TypeScript的Vue.js
- java list 效率_Java中5种List的去重方法及它们的效率对比,你用对了吗?
- 数据结构(C语言版本)
- 【转载】win10环境下,利用自带虚拟机hyper-v安装centos7方法详解
- 逃逸分析和标量替换技术,你明白了吗
- Shell:用sed命令删除特定行
- 抖音招商团长怎么做?怎么入驻?
- Python - 在for循环体内修改i值
- 【python拼图】遍历文件夹后,自动拼接图像成正方形图,或者指定行数显示
- 数学建模 --- 层次分析法(AHP模型)
- 关于Berkeley DB打开创建数据库文件
- python指纹识别_python实现CMS指纹识别
热门文章
- xml c libxml类库使用
- InitializeComponent()有什么作用?
- 历史回顾,各种编程工具的应用与我的发展历程之二(VB)
- rfid商品管理软件_哪个RFID固定资产管理系统比较好用?
- tt桌球瞄准器手机版_新年换台新手机!各价位段哪些机型值得入手?
- matlab电路环流,基于MATLAB的单芯电缆金属护套环流分析研究
- 环境变量太大解决方法
- python redis 消息队列_python中利用redis构建任务队列(queue)
- .net 程序加密方法
- Chrome检查更新总失败?安装细则讲解