工厂类

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

我的梦境 提交于 2020-04-04 00:00:11
目录 1. 简介 2. 示例1-计算器重构 2.1 背景说明 2.2 代码重构 2.3 程序类图 3. 示例2-模拟多功能日记记录器 3.1 背景说明 3.2 代码实现 3.3 程序类图 4. 总结分析 4.1 优点 4.2 缺点 4.3 适应场合 4.4 其他说明 5. 参考及源码下载 shanzm-2020年4月3日 22:26:27 1. 简介 工厂方法模式(Factory Method Pattern) 也称为 工厂模式 ,又称为虚拟构造器模式或多态模式。 在工厂方法模式中,工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象,这样做的目的是将产品类的实例化操作延迟到工厂子类中完成,即通过工厂子类来确定究竟应该实例化哪一个具体产品类。 工厂方法模式主要类: Product 抽象产品类(或是接口),派生出所有的具体产品类 ConcreteProductA 、 ConcreteProductA …… ConcreteProduct 具体产品类,继承于 Product 抽象类 Factory 抽象工厂接口,所有的具体工厂类都是实现该接口 ConcreteFactory 具体工厂,实现了 Factory 接口,创建具体的产品对象 注:在GoF的《设计模式:可复用面向对象软件的基础》,对工厂方法模式的描述中使用的是 Creator接口,其含有

工厂模式

邮差的信 提交于 2020-04-01 00:40:26
工厂模式 1.概念:    工厂方法 :以抽象产品类派生出多个具体产品类;一抽象工厂类派生出多个具体工厂类;每个具体工厂类只能创建你一个具体产品类的实例。   即定义一个创建对象的接口(即抽象工厂类),让其子类(具体工厂类)决定实例化哪一个类(具体产品类)." 一对一 "的关系    抽象工厂 :多个抽象产品类,派生出多个具体产品类;一个抽象工厂类,派生出多个具体工厂类;每个具体工厂类   可以创建多个具体产品类的实例。即提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们的具体的类." 一对多 "的关系 2. UML 工厂方法: 抽象工厂: 3. 代码 工厂方法: 1 public interface Product 2 { 3 } 4 5 public interface Creator 6 { 7 public Product factory(); 8 } 9 10 public class ConcreteProduct1 implements Product 11 { 12 public ConcreteProduct1() 13 { 14 System.out.println("ConcreteProduct1被创建"); 15 } 16 } 17 18 public class ConcreteProduct2 implements Product 19 {

工厂模式

喜夏-厌秋 提交于 2020-03-31 11:13:21
工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。 工厂模式分为三种:普通工厂模式、静态工厂模式、抽象工厂模式。 使用场景:    当我们直接new一个对象比较麻烦时,比如构造方法传参数量太多;   再比如创建一个类A要先创建类B,这种使用new比较麻烦时就可以交给工厂去做,还减少了代码的重复。 1、普通工厂模式: 就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。首先看下关系图: 举例如下:(我们举一个发送邮件和短信的例子) 首先,创建二者的共同接口: public interface Sender { public void Send(); } 其次,创建实现类: public class MailSender implements Sender { @Override public void Send() { System.out.println("this is mailsender!"); } } public class SmsSender implements Sender { @Override public void Send() { System.out

Java设计模式 工厂模式概念解析

六眼飞鱼酱① 提交于 2020-03-29 17:22:32
定义:工厂模式专门负责将大量有共同接口的类实例化。工厂模式可以动态决定将哪一个类实例化,而不必事先知道每次要实例化哪一个类。 三种形态: 简单工厂模式:又称静态工厂方法 工厂方法模式:又称多态性工厂模式或虚拟构造子模式 抽象工厂模式:又称工具箱模式 简单工厂模式:专门定义一个类来负责其他类的实例,被创建的实例通常具有共同的父类或接口。 适用场景: 工厂类负责创建的对象比较少:由于创建的对象比较少,不会造成工厂方法中的业务逻辑太过复杂; 客户端只知道传入工厂类的参数,对于如何创建对象不关心:客户端既不需要关心创建细节,甚至连类名都不需要记住,只需要知道类型所对应的参数; 优点: 工厂类含有必要的逻辑判断,可以决定什么时候创建哪一个产品实例,客户端可以免除直接创建产品对象的责任,而仅仅“消费”产品:简单工厂模式通过这种做法实现了对责任的分割,它提供了专门的工厂类用于创建对象; 客户端无需知道所创建的具体产品类的类名,只需要知道具体产品类所对应的参数即可,对于一些复杂的类名,通过简单工厂模式可以减少使用者的记忆量; 通过引入配置文件,可以在不修改任何客户端代码的情况下更换和增加新的具体产品类,在一定程序上提高了系统的灵活性。 缺点: 由于工厂类集中了所有产品创建逻辑,一旦不能正常工作,整个系统都要受到影响; 使用简单工厂模式将会增加系统中类的个数,在一定程度上增加了系统的复杂度和理解难度

设计模式之工厂方法模式

感情迁移 提交于 2020-03-24 09:49:22
上一篇我们学习了简单工厂方法,在写例子的时候我就在想在,工厂类怎么要写这么多的判断 - - !而且每增加一个新的产品,就要修改工厂模式,增加新的判断。 这么做违反了我们设计模式中的开闭原则。 今天就来学习下可以帮助我们消除这些判断的工厂方法模式。 定义:工厂方法(Factory Method)模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。 接着我们就上代码: 1 //首先是我们的抽象工厂类 2 package com.java.FactorMethod; 3 4 public interface MobileFactory { 5 public Mobile createMobile(); 6 } 7 8 //然后是抽象产品类 9 package com.java.FactorMethod; 10 11 public interface Mobile { 12 public void makeCall(); 13 } 这里我们要做的是一个手机工厂生产手机的例子。先定义一个抽象工厂接口,然后再定义一个抽象手机接口。接口都是定义了职责。 1 //苹果工厂 2 package

设计模式-工厂方法模式

梦想与她 提交于 2020-03-24 09:37:10
在阎宏博士的《JAVA与模式》一书中开头是这样描述工厂方法模式的:   工厂方法模式是类的创建模式,又叫做虚拟构造子(Virtual Constructor)模式或者多态性工厂(Polymorphic Factory)模式。   工厂方法模式的用意是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中。 那么 工厂方法模式 是在什么场景下使用呢,下面就以本人的理解举例说明:( 内容转自此文章 )   相信很多人都做过导入导出功能,就拿导出功能来说。有这么一个需求:XX系统需要支持对数据库中的员工薪资进行导出,并且支持多种格式如:HTML、CSV、PDF等,每种格式导出的结构有所不同,比如:财务跟其他人对导出薪资的HTML格式要求可能会不一样,因为财务可能需要特定的格式方便核算或其他用途。   如果使用简单工厂模式,则工厂类必定过于臃肿。因为简单工厂模式只有一个工厂类,它需要处理所有的创建的逻辑。假如以上需求暂时只支持3种导出的格式以及2种导出的结构,那工厂类则需要6个if else来创建6种不同的类型。如果日后需求不断增加,则后果不堪设想。   这时候就需要工厂方法模式来处理以上需求。在工厂方法模式中,核心的工厂类不再负责所有的对象的创建,而是将具体创建的工作交给子类去做。这个核心类则摇身一变,成为了一个抽象工厂角色,仅负责给出具体工厂子类必须实现的接口

工厂方法模式

让人想犯罪 __ 提交于 2020-03-23 13:32:48
@ 目录 一、概述 二、模式结构图 三、模式中包含的角色及职责 四、具体代码实现 1、创建产品接口和工厂接口 2、创建具体产品 3、创建具体的产品工厂类 4、调用实现 五、简单工厂模式和工厂方法模式的比较 一、概述 工厂方法模式同样属于类的创建型模式,工厂方法模式是定义一个工厂接口,将实际创建工作推迟到子类当中。核心工厂不在负责产品对象的创建,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是可以是系统在不修改工厂角色的情况下引进新的产品。 二、模式结构图 三、模式中包含的角色及职责 组成(角色) 关系 作用 抽象产品(Product) 具体产品的父类 描述具体产品的公共接口 具体产品(Concrete Product) 抽象产品的子类;工厂类的目标类 描述生产的具体产品 抽象工厂(Factory) 具体工厂的父类 描述具体工厂的公共接口 具体工厂(Concrete Factory) 抽象工厂的子类;被外界调用 描述具体工厂FactoryMethod工厂方法创建产品的实例。 四、具体代码实现 1、创建产品接口和工厂接口 还是用水果工厂举例,首先我们需要水果接口和水果工厂接口来约束具体的水果类和水果工厂类; package 工厂方法模式; public interface Fruit { // 生产水果 public void get(); } package 工厂方法模式;

工厂模式——我有不止一个对象

二次信任 提交于 2020-03-19 14:58:12
3 月,跳不动了?>>> 3年工作经验是吧? 你知道工厂模式分为几类吗?他们都有什么区别? 那你说说你们项目中是怎么使用工厂模式的? 带着问题,尤其是面试问题的学习才是最高效的。加油,奥利给! 文章收录在 GitHub JavaEgg ,N线互联网开发必备技能兵器谱 工厂模式 工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。 工厂模式可以分为三类: 简单工厂模式(Simple Factory) 工厂方法模式(Factory Method) 抽象工厂模式(Abstract Factory) 简单工厂其实不是一个标准的的设计模式。GOF 23种设计模式中只有「工厂方法模式」与「抽象工厂模式」。简单工厂模式可以看为工厂方法模式的一种特例,为了统一整理学习,就都归为工厂模式。 这三种工厂模式在设计模式的分类中都属于 创建型模式 ,三种模式从上到下逐步抽象。 创建型模式 创建型模式(Creational Pattern)对类的实例化过程进行了抽象,能够将软件模块中对象的创建和对象的使用分离。为了使软件的结构更加清晰,外界对于这些对象只需要知道它们共同的接口,而不清楚其具体的实现细节

java设计模式之简单工厂模式

和自甴很熟 提交于 2020-03-18 14:56:47
简单工厂模式的概念   就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。 简单工厂模式的UML图    简单工厂模式代码   学习简单工厂模式的时候我用的是一个与人类有相关的例子。人类在世界分为男人和女人,首先定义一个Human产品的抽象接口 /** * This is factory patter package */ package com.roc.factory; /** * 产品的抽象接口 人类 * @author liaowp * */ public interface Human { public void say(); } 然后定义男人和女人,同样都有说话的方法。 /** * This is factory patter package */ package com.roc.factory; /** * man 男人 * @author liaowp * */ public class Man implements Human { /* say method * @see com.roc.factory.Human#say() */ @Override public void say() { System.out.println("男人")

设计模式---简单工厂和工厂模式

坚强是说给别人听的谎言 提交于 2020-03-18 14:51:53
  这两天看了一下设计模式的书,觉得很不错,所以总结一下:   现在比如我们要写一个简单的计算器,你要实现的是 + , - , ×, /。   简单工厂的处理方式是:   一个抽象的运算类,其中一个抽象方法GetResult(),然后是加法类,减法类,除法类,乘法类都从运算类继承。一个工厂类中根据+ - × /来NEW出对应的类。 其实的好处是在客户端我们不需要了解类的实现,只要NEW一个运算器,根据符号得到对应的运算类,然后调用GetResult(),得到结果。   工厂模式的处理方法是:   在简单工厂的基础上,把工厂类改成抽象,然后通过继承工厂类分别形成加法工厂类,减法工厂类,除法......在客户端我们要通过具体的工厂类来NEW出对应的运算类。 来源: https://www.cnblogs.com/yujianjingjing/archive/2012/05/08/2489962.html