工厂模式分三类:简单工厂模式、工厂方法模式、抽象工厂模式。 首先介绍比较简单一种工厂模式——简单工厂模式。 我们以计算器作为一个例子来说明工厂模式到底是什么。 既然是工厂模式,那就有一个工厂类。这个工厂类是用来干嘛的呢?工厂是用来做什么呢?生产东西用的,工厂模式的工厂类就使用类生产不同类不同对象的。 package day_1_sampleFactory; /** * 简单工厂设计模式 * @author turbo * * 2016年8月31日 */ public class Main oper.setNumberA(1); oper.setNumberB(2); System.out.println(oper.getResult()); } } 利用简单工厂模式 #到现在,就是简单工厂模式的思想,为什么不能几个if分支判断来实现计算器呢?那样岂不是代码量更少,好像更容易阅读么?
蔡了赶紧辩解,“——只是,我虽然搞清楚了静态工厂实际用的是简单工厂模式,却不知道它能给设计带来什么好处?查了好多资料,发现居然有各种各样的工厂模式,不看还好,越看越糊涂了!” 这么一说,小姑娘就回过味来,说道:“对啊,有了这些简单工厂,就能更加清晰地告诉调用者究竟创建了什么样的Optional对象,尤其那个empty(),实在太传神了! 只要你希望调用者无需了解产品对象创建变化的逻辑,在工厂方法返回父类产品的前提下,你都可以使用简单工厂。 我看你彻底理解了简单工厂的含义!” “噢耶!” 得到马大叔的肯定,蔡了不由得欢呼起来,不过想到其他工厂模式,又苦下脸来,说道:“可是——我还是不太明白简单工厂模式与工厂方法模式、抽象工厂模式的区别和使用场景呢。”
简单工厂 用一个类来实例类 1.一个计算器的类有两个属性,为number1和number2 2.一个virtual方法用来得到结果 3.在工厂类中根据用户的操作符类型决定具体实例化哪个类 用例: break; } } return null; } } 工厂模式 工厂模式将用一个类来对一个类实例化,这些实例化的类继承一个抽象的实例化类。 这种模式避免了简单工厂中的switch、case的情况,在具体需要实例一个类的时候,调用某一个类就可以 让一个类的实例化延迟到其子类。
工厂模式分三类: 简单工厂 工厂方法 抽象工厂 简单工厂不属于设计模式,因为其违背了设计模式的开闭原则,后面会有介绍。 工厂方法 ? 车可以生产车,那具体的奥迪车工厂可以生产奥迪车,奔驰车工厂可以生产奔驰的车。当需要生产法拉利的车时,我们只需要实现一个法拉利的产品,然后实现一个法拉利的工厂即可,而不需要修改之前的代码。 简单工厂 ? factory_simple.png 这是工厂模式的简单实现方式,包含元素 工厂类 抽象产品 抽象方法 示例 这里抽象产品和抽象方法和前面一样。 比如:当需要生产法拉利时,我们需要修改工厂类的方法。这不符合开闭原则,所以它不属于设计模式。只是工厂模式的一个变相简单的实现。 抽象工厂 前面说到工厂方法只能生产一个类型的产品。 当我们需要生产一系列的产品,比如:我们需要奥迪的发动机,那么肯定也是在奥迪的工厂生产,那么这里就可以使用抽象工厂设计模式 元素 抽象工厂 具体工厂 抽象产品(多个) 具体产品 示例 这里我们再Car的基础上在增加一个产品
简单工厂模式详解 定义 简单工厂模式(Simple Factory Pattern)是一种创建型设计模式,用于创建对象的实例。通过一个工厂类来决定实例化哪一个具体类,降低客户端与具体类之间的耦合。 对于长switch或者长if、else,且多处调用情形,可以考虑使用简单工厂模式。 特点 封装实例化逻辑:将对象的创建集中在一个工厂类中。 如何增强简单工厂模式 结合单例模式:将工厂类设计为单例,避免频繁创建工厂实例。 (Product)Activator.CreateInstance(productType) : null; } 简单工厂模式与其他模式的比较 特性 简单工厂模式 工厂方法模式 抽象工厂模式 复杂度 低 ; } return 0; } 总结 简单工厂模式是一种结构简单但实用的设计模式,适合用于需求变化不频繁的小型项目或模块中,更多内容完善了简单工厂模式的局限性及改进方案,并扩展了实际应用案例
定义 从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。 简单工厂模式是工厂模式家族中最简单实用的模式。 需求 使用Java来编写一个计算器控制台程序,要求输入两个数和运算符号,得到结果。 然后创建了加减乘除四个子类,分别实现其运算方法,如果以后需要修改某种运算,只需要去修改相应的类即可,如果需要增加某种运算,只需要去实现Operation的getResult方法即可,那么,我们还需要一个创建运算类的工厂 ; e.printStackTrace(); } } } 将创建对象的工作交给工厂负责,使客户端调用和运算类解耦,当我们更改运算类时,客户端代码不会受到影响,也不需要修改。
学习python有一年了,在工作中经常使用,不过多是一些基础操作和简单库的使用,受朋友打击,想学习一些深层次的内容,所以从本篇开始学习设计模式,首先是简单工厂模式。 简单工厂模式 简单工厂模式主要在生成类时使用,它解决的是类的创建问题。 比如一个计算器类,使用加减乘除的哪一个取决于输入的操作符,写一个生成操作类的工厂可以灵活选择所需要的类,并且可以方便添加新的操作而不需要改变旧的操作的代码,这也是可扩展的体现。
本文主要对比一下简单工厂以及工厂方法在此情景需求下的实现方式。 一.简单工厂 概念:简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。 图一:简单工厂模式的UML 二.工厂方法 概念:核心工厂类不再负责产品的创建,成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口。 图二:工厂方法模式的UML 通过对比我们可以发现: 1)简单工厂主要适合由工厂创造的“产品”(product)功能要求单一,而且区分界限明显【缺点:对工厂的方法开放‘修改’】 比如:计算器加减乘除运算仅返回一个 result(),由‘+、-、*、/’进行自动区分; 2)工厂方法适合工厂制造的product具有多功能,标准化工厂接口,具体产品由实现该接口的子工厂实现【缺点:将具体产品的生产“判断”抛出到了客户端,
简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Factory Method)模式。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。 boolean flag = login.verify(account, pwd); if(flag){ } else { } 其实这就是简单工厂了 boolean flag = login.verify(account, pwd); if(flag){ } else { } } 总结: 简单工厂模式的优点 简单工厂模式通过这种做法实现了对责任的分割,当系统引入新的登录方式的时候无需修改调用者。 简单工厂模式的缺点 这个工厂类集中了所以的创建逻辑,当有复杂的多层次等级结构时,所有的业务逻辑都在这个工厂类中实现。什么时候它不能工作了,整个系统都会受到影响。
一、简单工厂模式的相关概念: 1、定义:简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式。 每个类的主要功能: 简单工厂:简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类的创建产品类的方法可以被外界直接调用,创建所需的产品对象。 抽象产品:简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。 具体产品:是简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。 二、C++程序示例 1 // 简单工厂模式.cpp : 定义控制台应用程序的入口点。 所以要将69行中creat_fruit(num);声明为静态成员函数static fruit* creat_fruit(int name_num);估计这就是简单工厂模式又叫做静态工厂模型的原因吧。
简单工厂模式概述 ---- 定义:定义一个工厂类,他可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类 在简单工厂模式中用于被创建实例的方法通常为静态(static)方法,因此简单工厂模式又被成为静态工厂方法 这时候,我这家 披萨店就可以看做工厂(Factory),而生产出来的披萨被成为产品(Product),披萨的名称则被称为参数,工厂可以根据参数的不同返回不同的产品,这就是简单工厂模式 简单工厂模式的结构与实现 简单工厂模式的优缺点和适用环境 ---- 简单工厂模式的优点 (1)工厂类包含必要的逻辑判断,可以决定在什么时候创建哪一个产品的实例。 简单工厂模式的适用环境 (1)工厂类负责创建对的对象比较少,因为不会造成工厂方法中的业务逻辑过于复杂 (2)客户端只知道传入工厂类的参数,对如何创建对象不关心 简单案例 ---- 题目: 简单工厂模式由于使用了静态工厂方法,造成工厂角色无法形成基于继承的等级结构。
构成:抽象产品+实例产品+工厂 思想:多样化的产品,传给工厂什么信号就生产什么产品(调用什么方法) public interface product { public void phone(
简单工厂模式概述 简单工厂模式基本实现流程 简单工厂模式的代码实现 简单工厂模式的应用实例 创建对象与使用对象 实例分析 何时不需要工厂? 简单工厂模式概述 简单工厂模式基本实现流程 具体产品类:将需要创建的各种不同产品对象的相关代码封装到具体产品类中 抽象产品类:将具体产品类公共的代码进行抽象和提取后封装在一个抽象产品类中 工厂类:提供一个工厂类用于创建各种产品 ,而无须知道其创建细节 简单工厂模式结构:简单工厂模式包含以下3个角色: Factory(工厂角色) Product(抽象产品角色) ConcreteProduct(具体产品角色) 简单工厂模式的代码实现 现使用简单工厂模式来设计该图表库。 简单工厂模式的简化 将抽象产品类和工厂类合并,将静态工厂方法移至抽象产品类中 简单工厂模式的优缺点与适用环境 模式优点 实现了对象创建和使用的分离 客户端无须知道所创建的具体产品类的类名,只需要知道具体产品类所对应的参数即可
简介 简单工厂模式 (Simple Factory) 又叫静态工厂方法(Static Factory Method)模式。 简单工厂模式通常是定义一个工厂类,这个类可以根据不同变量返回不同类的产品实例。 简单工厂模式是一种对象创建型模式 (可参考 设计模式 创建型模式)。但是简单工厂模式不属于23种Gof设计模式之一。 图-简单工厂模式结构图 Product (Operation) : 产品角色,简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。 通过使用简单工厂模式,用户无需了解对象如何创建的,只要传入必要信息就可以了。 缺点 工厂类集中了所有实例的创建逻辑,违背了高内聚责任分配原则。 简单工厂模式属于工厂模式家族,欢迎参考阅读 工厂方法模式 、抽象工厂方法模式 。 参考资料 《大话设计模式》 《HeadFirst设计模式》
(比如:GreekPizza、CheesePizza等) 2、披萨的制作有prepare,bake,cut,box 3、完成披萨店订购功能 基本介绍 1)简单工厂模式是属于创建型模式 简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。 简单工厂模式是工厂模式家族中最简单实用的模式 2)简单工厂模式:定义了一个创建对象的类,由这个类来封装实例化对象的行为(代码) 3)在软件开发中,当我们会用到大量的创建某种 DesignPattern * @Package: simplefactory * @Author: huat * @Date: 2020/6/17 8:46 * @Version: 1.0 */ //简单工厂类 public class SimpleFactory { public Pizza createPizza(String type){ System.out.println("使用简单工厂模式
简单工厂模式 简单工厂模式又叫静态工厂方法,由一个工厂对象决定创建某一种对象类的实例,这种类型的设计模式属于创建型模式,在简单工厂模式中,可以根据参数的不同返回不同类的实例,简单工厂模式专门定义一个类来负责创建其他类的实例 描述 简单工厂模式目的是定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行,主要解决接口选择的问题,让其子类实现工厂接口,返回的也是一个抽象的产品。 优点 工厂类含有必要的判断逻辑,可以决定在什么时候创建哪一个产品类的实例,客户端可以免除直接创建产品对象的责任,而仅仅消费产品,简单工厂模式通过这种做法实现了对责任的分割,它提供了专门的工厂类用于创建对象 缺点 由于工厂类集中了所有产品创建逻辑,一旦不能正常工作,整个系统都要受到影响。 使用简单工厂模式将会增加系统中类的个数,在一定程序上增加了系统的复杂度和理解难度。 系统扩展困难,一旦添加新产品就不得不修改工厂逻辑,在产品类型较多时,有可能造成工厂逻辑过于复杂,不利于系统的扩展和维护。 简单工厂模式由于使用了静态工厂方法,造成工厂角色无法形成基于继承的等级结构。
简单工厂模式: 含义:简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。 因为在简单工厂模式中用于创建实例的方法是静态(static)方法,因此简单工厂模式又被称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式。 问题 何时使用 简单工厂模式,我的理解是:某类产品的成产线。通过设置不同的参数,生产出同一类别下不同形态的产品。 那就很简单,在新建个条形图的类。然后修改一下工厂类ChartFactory。看似简单,但是产品多的情况下每次都要去修改工厂类无疑会造成维护困难。逻辑复杂。 由于简单工厂很容易违反高内聚责任分配原则,因此一般只在很简单的情况下应用。 至此,简单工厂模式就能明白了吧。
设计模式的目的是让代码易维护、易扩展,不能为了模式而模式,因此一个简单的工具脚本是不需要用到任何模式的。 简单工厂模式又叫静态工厂方法模式,工厂模式家族中最简单的一种模式。 简单工厂模式的好处是可以将产品对象的细节封装在其实现类的内部,改变一个产品对象具体实现不会影响其他产品。可扩展性强,当需要新增产品类型时,只需要添加对应的实现类,然后修改工厂,增加一个判断分支即可。 修改工厂函数带来的风险比较低。 另外一个比较典型的适合简单工厂模式的例子是计算器,计算器需要支持各种计算操作,比如加、减、乘、除、平方、立方、平方根、阶乘等等。 简单工厂模式的组成要素 工厂函数 负责具体产品对象的创建工作,是该模式的核心。当场景比较复杂时,可能需要用一个工厂类来负责产品的创建。 ,对系统的维护和扩展非常不利; 使用场景 工厂类负责创建的对象比较少; 客户只知道传入工厂类的参数,对于如何创建对象(逻辑)不关心; 由于简单工厂很容易违反高内聚责任分配原则,因此一般只在很简单的情况下应用
简单工厂模式的定义: 专门定义一个类来负责创建其它类的实例,被创建的实例通常都具有共同的父类。 简单工厂模式实质是由一个工厂类根据传入的参量动态决定应该创建出哪一个产品类的实例。 简单工厂模式实际上不属于23个GOF模式,但他可以作为工厂方法模式(Factory Method)的一个引导。 简单工厂模式设计的角色: 工厂角色:是简单工厂的核心,它负责实现创建所有实例内部逻辑。工厂类可以被外界直接调用,创建所需的产品对象。 抽象产品角色:是简单工厂模式所创建的所有父对象类,它负责描述所有实例所有的公共接口。 具体产品角色:是简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。 : 工厂类负责创建的对象比较少; 客户只知道传入工厂类的参数,对于如何创建对象(逻辑)不关心; 由于简单工厂很容易违反高内聚责任分配原则,因此一般只在很简单的情况下应用。
简单工厂模式解释: 简单工厂模式(Simple Factory Pattern)属于类的创新型模式,又叫静态工厂方法模式(Static FactoryMethod Pattern),是通过专门定义一个类来负责创建其它类的实例 简单工厂模式的UML图: 简单工厂模式中包括的角色及其对应的职责例如以下: 工厂角色(Creator):这是简单工厂模式的核心,由它负责创建全部的类的内部逻辑。 简单工厂模式深入分析: 简单工厂模式解决的问题是怎样去实例化一个合适的对象。 简单工厂模式的核心思想就是:有一个专门的类来负责创建实例的过程。 另外,简单工厂模式的方法一般都是静态的,而静态工厂方法是无法让子类继承的,因此,简单工厂模式无法形成基于基类的继承树结构。 简单工厂模式的实际应用简单介绍: 作为一个最基本和最简单的设计模式,简单工厂模式却有非常非常广泛的应用,我们这里以Java中的JDBC操作数据库为例来说明。