工厂模式

设计模式之工厂模式 - 工厂方法模式

流过昼夜 提交于 2019-12-02 05:33:47
一、简介 概念:定义了一个创建对象的抽象方法,由子类决定要实例化的类,将对象实例化推迟到子类进行。 按照前面讲解的简单工厂模式,假如随着需求不断变化,系统需要优化,想将宝马汽车、奔驰汽车等不同品牌的汽车分开生产,可能后面会扩展不同品牌不同厂家这种情况。针对这种情况,我们可以使用工厂方法模式创建不同品牌汽车的工厂,这样的话,他们之间互不影响。后面如果想扩展其他品牌的话,也无需改动旧代码,直接添加多一个工厂实现类即可。 二、工厂方法模式 相关类图如下: 通过类图可以看到,工厂方法模式有四个要素: 抽象工厂类:抽象工厂类是工厂方法模式的核心,与调用者直接交互用来提供产品,可以是接口,也可以是抽象类。 具体工厂实现:工厂实现是具体的实例化对象的类,如果需要扩展新的产品种类,就增加多一个工厂的实现即可。 产品接口:产品接口的主要目的是定义产品的规范,所有的产品实现都必须遵循产品接口定义的规范。产品接口是调用者最为关心的,产品接口定义的优劣直接决定了调用者代码的稳定性。同样,产品接口也可以用抽象类来代替,但要注意最好不要违反里氏替换原则。 产品实现:实现产品接口的具体类,决定了产品在客户端中的具体行为。 具体代码实现如下: 【a】ICar汽车接口 /** * @Description: ICar汽车接口 * @author: weixiaohuai * @Date: 2019/10/19 20

工厂模式3

天大地大妈咪最大 提交于 2019-12-02 05:04:19
什么是抽象工厂模式 抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。抽象工厂模式是指当有多个抽象角色时使用的一种工厂模式,抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。根据LSP原则,任何接受父类型的地方,都应当能够接受子类型。因此,实际上系统所需要的,仅仅是类型与这些抽象产品角色相同的一些实例,而不是这些抽象产品的实例。换句话说,也就是这些抽象产品的具体子类的实例,工厂类负责创建抽象产品的具体子类的实例。 抽象工厂模式的设计类如图所示 AbstractProductA和AbstractProductB代表一个产品家族,实现这些接口的类代表具体的产品。AbstractFactory为创建产品的接口,能够创建这个产品家族中的所有类型的产品,它的子类可以根据具体情况创建对应的产品。 抽象工厂模式代码描述 创建Fruit接口、Apple抽象类、ChinaApple类等 Fruit(interface): public interface Fruit { public void get ( ) ; } Apple抽象类: public abstract class Apple implements Fruit { public abstract void get ( ) ; } ChinaApple类:

(二)工厂模式

橙三吉。 提交于 2019-12-02 00:24:53
(二)工厂模式 GOF工厂模式定义 :为创建对象定义一个接口,让子类决定实例化那个类,工厂方法让一个类的实例化延迟至子类。 工厂模式分类: (1)简单工厂(Simple Factory)模式,又称静态工厂方法模式(Static Factory Method Pattern)。 (2)工厂方法(Factory Method)模式,又称多态性工厂(Polymorphic Factory)模式或虚拟构造子(Virtual Constructor)模式; (3)抽象工厂(Abstract Factory)模式,又称工具箱(Kit 或Toolkit)模式。 1.3 在开源框架中的使用 举两个比较常见的例子(我暂时可以准确想到的,当然还有很多很多): (1) Spring中通过getBean("xxx")获取Bean;(2)Java消息服务JMS中(以消息队列ActiveMQ为例)关于消息队列ActiveMQ的使用可以查看:消息队列ActiveMQ的使用详解 // 1、创建一个连接工厂对象,需要指定服务的ip及端口。 ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://192.168.25.155:61616"); // 2、使用工厂对象创建一个Connection对象。 Connection

【设计模式】工厂模式

帅比萌擦擦* 提交于 2019-12-01 18:56:22
工厂模式 工厂模式 工厂模式属于创建型模式,定义了一个用于创建对象的接口,让子类决定实例化哪一个类。工厂模式使一个类的实例化延迟到其子类 模拟场景:实现一个计算器的多种运算功能 下面代码演示: autoload.php 12345678910111213 <?phpfunction classLoader($class){ $path = str_replace('\', DIRECTORY_SEPARATOR, $class); $file = __DIR__ . DIRECTORY_SEPARATOR . $path . '.php'; if (file_exists($file)) { require_once $file; }}spl_autoload_register('classLoader'); 具体运算类代码 Operation.php 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 <?phprequire_once "OperationInterface.php";/** * Class Add * @package

【设计模式】工厂模式

泄露秘密 提交于 2019-12-01 18:34:54
工厂模式 工厂模式 工厂模式属于创建型模式,定义了一个用于创建对象的接口,让子类决定实例化哪一个类。工厂模式使一个类的实例化延迟到其子类 模拟场景:实现一个计算器的多种运算功能 下面代码演示: autoload.php 12345678910111213 <?phpfunction classLoader($class){ $path = str_replace('\', DIRECTORY_SEPARATOR, $class); $file = __DIR__ . DIRECTORY_SEPARATOR . $path . '.php'; if (file_exists($file)) { require_once $file; }}spl_autoload_register('classLoader'); 具体运算类代码 Operation.php 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 <?phprequire_once "OperationInterface.php";/** * Class Add * @package

设计模式-工厂模式

一笑奈何 提交于 2019-12-01 16:33:37
1. 什么是工厂模式    工厂模式(Factory Pattern) 是 Java 中最常用的设计模式之一。这种类型的设计模式 属于创建型模式,它提供了一种创建对象的最佳方式 。 在工厂模式中,我们在 创建对象时不会对客户端暴露创建逻辑 , 并且 是 通过使用一个共同的接口来指向新创建的对象 。 2. 优缺点    优点:     1、 一个调用者想创建一个对象,只要知道其名称就可以了 。      2、 扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以 。      3、 屏蔽产品的具体实现,调用者只关心产品的接口 。   缺点:      每次增加一个产品时,都需要增加一个具体类和对象实现工厂,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度 ,同时也增加了系统具体类的依赖。这并不是什么好事。 3.具体应用   1、您 需要一辆汽车,可以直接从工厂里面提货,而不用去管这辆汽车是怎么做出来的 ,以及这个汽车里面的具体实现。   2、 Hibernate 换数据库只需换方言和驱动 就可以。 4.UML类图 来源: https://www.cnblogs.com/helloworldmybokeyuan/p/11693365.html

设计模式-工厂模式/委派模式/代理模式/单例模式

淺唱寂寞╮ 提交于 2019-12-01 16:13:33
1.工厂模式:spring中运用的都是工厂模式,不参与业务的枚举就是工厂模式,所有人均可以调用,工厂模式就是在底层框架中写好. 例如:new 了一个Map 那这个Map创造的过程其实是底层工厂模式代码创造出来. 简单工厂模式: 抽象工厂模式: 2.委派模式:只关注结果,并不参与其中. 例如: 发送短信接口:输入手机号就进行短信发送 3.代理模式 代理模式还是需要人员参与返回结果的处理当中,像对接口传回的结果进行处理. 4.单例模式 一个类中只有一个对象, 例如:进行业务方法处理时只需要调用这个对象即可. 例如研发部门是一个类,想要让研发部门的做一些事情就找研发部门的老大 包老师就可以,包老师就是那个单例模式中的对象 来源: oschina 链接: https://my.oschina.net/u/3717819/blog/2049635

Python笔记:工厂模式

为君一笑 提交于 2019-12-01 14:02:20
工厂模式: “工厂”即表示一个负责创建其他类型的对象的类,通常情况下,一个工厂的对象会有一个或多个方法与之关联,这些方法用于创建不同类型的对象,工厂对象会根据客户端给方法传递的不同的参数或者客户端调用不同的方法返回不同的对象。 优点: 对象的创建是可以根据需要单独创建的,但是使用工厂模式来创建对象有以下优点: 松耦合,对象的创建是根据工厂类来进行的,与类本身的实现是独立开来的。 对于客户端来说,不需要知道类的具体实现,只需要调用相应接口就可以得到需要的对象了,这其实是简化了客户端的相关实现。 对于对象的修改只需要在工厂里面进行即可,包括添加新的对象,客户端只需要更改少量的代码,甚至可以不修改代码就可以达到要求。 使用工厂接口,还可以重用已有的对象,不用去别处调用已有的对象或者重新创建一个对象。 工厂模式的3种实现形式(或者说3中变体): 简单工厂模式: 工厂类会提供一个接口,并根据客户端传入参数来创建相应的实例对象。(创建一个对象) 工厂方法模式: 需要定义一个基类,不同的子类则代表着不同类型的对象。相对于简单工厂模式而言,工厂方法模式具有更强的可定制性。(创建一个对象) 抽象工厂模式: 需要定义一个抽象工厂类,然后由不同的子类来创建不同系列的对象,一个系列即代表一组对象。(创建一组对象) 简单工厂模式示例: from abc import ABCMeta,

修饰者模式(装饰者模式,Decoration)

丶灬走出姿态 提交于 2019-12-01 09:55:16
转自: https://www.cnblogs.com/aspirant/p/9082858.html BeanFacotry是spring中比较原始的Factory。如XMLBeanFactory就是一种典型的BeanFactory。原始的BeanFactory无法支持spring的许多插件,如AOP功能、Web应用等。 ApplicationContext接口,它由BeanFactory接口派生而来,ApplicationContext包含BeanFactory的所有功能,通常建议比BeanFactory优先 BeanFactory和FactoryBean的区别 BeanFactory是接口,提供了OC容器最基本的形式,给具体的IOC容器的实现提供了规范, FactoryBean也是接口,为IOC容器中Bean的实现提供了更加灵活的方式,FactoryBean在IOC容器的基础上给Bean的实现加上了一个简单工厂模式和装饰模式(如果想了解装饰模式参考: 修饰者模式(装饰者模式,Decoration) 我们可以在getObject()方法中灵活配置。其实在Spring源码中有很多FactoryBean的实现类. 区别:BeanFactory是个Factory,也就是IOC容器或对象工厂,FactoryBean是个Bean。在Spring中,

细谈PHP设计模式----my note

≡放荡痞女 提交于 2019-12-01 09:22:28
现在 php的书籍很多,其实原理都一样。 先谈其设计模式 设计模式并不是是为 Java 架构师准备的 。实际上,设计模式对于每个开发人员都非常有用。 设计模式不仅代表着更快开发健壮软件的有用方法,而且还提供了以友好的术语封装大型理念的方法。例如,您可以说您正在编写一个提供松散耦合的消息传递系统,也可以说你正在编写名称为观察者 的模式。 用较小的示例展示模式的价值是非常困难的。这往往有些大材小用的意味,因为模式实际上是在大型代码库中发挥作用的。本文不展示大型应用程序,所以您需要思索的是在您自己的大型应用程序中应用示例原理的方法 ——而不是本文演示的代码本身。这不是说您不应该在小应用程序中使用模式。很多良好的应用程序都以小应用程序为起点,逐渐发展到大型应用程序,所以没有理由不以此类扎实的编码实践为基础。 既然您已经了解了设计模式以及它们的有用之处,现在我们来看看 PHP5 的五种常用模式。 工厂模式 最初在设计模式 一书中,许多设计模式都鼓励使用松散耦合。要理解这个概念,让我们最好谈一下许多开发人员从事大型系统的艰苦历程。在更改一个代码片段时,就会发生问题,系统其他部分 —— 您曾认为完全不相关的部分中也有可能出现级联破坏。 该问题在于紧密耦合 。系统某个部分中的函数和类严重依赖于系统的其他部分中函数和类的行为和结构。您需要一组模式,使这些类能够相互通信,但不希望将它们紧密绑定在一起