工厂模式

1.工厂模式(Factory Method)

試著忘記壹切 提交于 2019-12-01 08:55:21
注:图片来源于 https://www.cnblogs.com/-saligia-/p/10216752.html 工厂UML图解析: 工厂模式:client用户需要三步: 1.创建工厂; 2.生产产品对象; 3.使用对象方法。 代码: 工厂类 Factory.h // // Created by Halo on 2019/10/14. // #ifndef FACTORY_FACTORY_H #define FACTORY_FACTORY_H #include "Product.h" //抽象手机工厂类 class Factory { public: //生产手机 virtual Phone* CreatePhone() = 0; }; //OPPO手机工厂 class OPPOFactory : public Factory { public: //OPPO手机工厂类 use a OPPO手机类 Phone* CreatePhone() override { return new OPPO(); } }; //VIVO手机工厂 class VIVOFactory : public Factory { public: Phone* CreatePhone() override { return new VIVO(); } }; //HUAWEI手机工厂 class

工厂模式

拜拜、爱过 提交于 2019-12-01 08:49:05
Duck duck = new MallardDuck() Duck duck 使用接口让代码具有弹性 new MallardDuck() 但是还是得建立具体类的实例 当有一群相关的具体类时,必须等到运行时才知道该实例化哪一个,所以代码里会有很多 if else 工厂类封装创建对象的代码 静态工厂 优点:不需要使用创建对象的方法来实例化对象 缺点:不能通过继承来改变创建方法的行为 来源: https://www.cnblogs.com/jialilue/p/11674115.html

Java-工厂设计模式

余生长醉 提交于 2019-12-01 08:14:48
                           Java工厂设计模式 一、关于工厂设计模式 介绍 : 设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,     并且是通过使用一个共同的接口来指向新创建的对象。 意图: 定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。 主要解决: 主要解决接口选择的问题。 何时使用: 我们明确地计划不同条件下创建不同实例时。 如何解决: 让其子类实现工厂接口,返回的也是一个抽象的产品。 分类 :普通 简单工厂、多个方法的简单工厂、多个静态方法的简单工厂、工厂设计模式。 二、代码实现     简单工厂: 就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。首先看下关系图    举例如下:(我们举一个发送邮件和短信的例子) 首先,创建二者的共同接口: Sender package pers.hupo.hupow.factory; /** * @author hupo * 创建一个接口 * */ public interface Sender { void Send(); } View Code 其次,创建实现类: MailSender package pers.hupo.hupow.factory; /** * @author

js-工厂模式

不打扰是莪最后的温柔 提交于 2019-12-01 07:57:49
使用情况:输入时间,返回固定的格式 DateUtil: { // 获取date对象 可传字符串 兼容ios safari date (val) { if (!val) return false if (!val.getTime) { if (typeof val === 'number') return new Date(val) let arr = val.split(/[- : T /]/) arr[1] -= 1 return new Date(...arr) } else { return val } }, format (date, fmt) { date = this.date(date) let o = { 'M+': date.getMonth() + 1, // 月份 'd+': date.getDate(), // 日 // 'h+': date.getHours() % 12 === 0 ? 12 : date.getHours() % 12, // 小时 'h+': date.getHours(), // 小时 'H+': date.getHours(), // 小时 'm+': date.getMinutes(), // 分 's+': date.getSeconds(), // 秒 'q+': Math.floor((date.getMonth() +

工厂模式

拈花ヽ惹草 提交于 2019-12-01 07:44:10
面向对象设计的基本原则 OCP(开闭原则) :一个软件的实体应当对扩展开放,对修改关闭。 DIP(依赖倒转原则):要针对接口编程,不要针对实现编程。 LoD(迪米特法则): 只与你直接的朋友通信,而避免和陌生人通信。 工厂模式核心本质: -实例化对象,用工厂方法代替new操作。 -将选择实现类,创建对象统一管理和控制,从而将调用者跟我们的实现类解耦。 工厂模式(实现创建者和调用者的分离)分为3大类 简单工厂模式 描述: 简单工厂模式是由一个工厂对象根据收到的消息决定要创建哪一个类的对象实例 使用场景 工厂类负责创建的对象比较少,客户只需要传入工厂类的参数,对于如何创建对象 (逻辑)不关心,简单工厂模式很容易违反高内聚,低耦合的原则,英雌一般只在很简单的情况下使用 优点: 工厂类中包含了必要的逻辑们根据客户需要的逻辑动态实例化相关的类 工厂方法模式 描述: 定义一个创建对象的工厂接口,让子类决定实例化哪一个类,将实际创建工作推迟到子类当中 使用场景: 1、日志记录器:记录可能记录到本地硬盘、系统事件、远程服务器等,用户可以选择记录日志到什么地方。 2、数据库访问,当用户不知道最后系统采用哪一类数据库,以及数据库可能有变化时。 3、设计一个连接服务器的框架,需要三个协议,"POP3"、"IMAP"、"HTTP",可以把这三个作为产品类,共同实现一个接口。

Java设计模式:Abstract Factory(抽象工厂)模式

允我心安 提交于 2019-12-01 06:09:17
概念定义 抽象工厂(Abstract Factory)模式提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 抽象工厂模式中,系统的产品有 多于一个 的产品族(一个产品族里定义多个产品),而系统只消费其中某一族的产品。换句话说,抽象工厂创建一整套具有相互依赖或作用关系的产品(至少两个产品),而工厂方法中的工厂只能创建单一系列的产品。 应用场景 客户端不需要知道它所创建的对象的类。 需要一组对象共同完成某种功能时,并且可能存在多组对象完成不同功能的情况。 系统结构稳定,不会频繁地增加对象。 示例代码 抽象工厂模式由 工厂接口 (或抽象类)、一组实现工厂接口 工厂类 、一个 产品接口 (或抽象类)和一组实现产品接口的 具体产品 组成。 本节通过一个"喜闻乐见"的豪车系列,展示抽象工厂模式的实现。示例代码如下(注意豪车有两个产品 -- 引擎和娱乐系统): // 产品接口 - 引擎 // public interface IEngine { void show(); } // 若干具体的产品 - 宝马与奔驰的引擎 // public class BmwEngine implements IEngine { @Override public void show() { System.out.println("Bmw's engine"); } } public class

设计模式--工厂模式

会有一股神秘感。 提交于 2019-12-01 05:06:18
还是以计算器为例 首先定义Operation接口和Add,Sub,Mul,Div操作 public interface Operation { public double getResult(double a, double b); } public class Add implements Operation { @Override public double getResult(double a, double b) { return a + b; } } public class Sub implements Operation { @Override public double getResult(double a, double b) { return a - b; } } public class Mul implements Operation { @Override public double getResult(double a, double b) { return a * b; } } public class Div implements Operation { @Override public double getResult(double a, double b) { if (b == 0) { throw new

部分设计模式对比分析

一个人想着一个人 提交于 2019-11-30 23:49:19
桥接模式与装饰者模式区别: 桥接模式类图 装饰者模式类图    1、定义:     (1)桥接模式:将抽象部分与它的实现部分分离,使它们都可以 独立地变化     (2)装饰者模式: 动态 地给一个对象 增加一些额外的职责 ,就增加对象功能来说,装饰模式比生成子类实现更为灵活    2、“独立部分”不同:     (1)桥接模式:抽象类和实现接口类是 相互独立 的,降低了类之间的耦合度     (2)装饰者模式:具体构件以及抽象装饰类都 继承 自抽象构件,所以仍是 紧耦合    3、角度不同:     (1)桥接模式:对象自身有沿着多 个维度变化的趋势 , 本身 不稳定     (2)装饰者模式:对象自身比较 稳定 , 只是为了 增加新功能或增强原功能    4、适用环境:     (1)桥接模式:       A、当一个类存在两个 独立变化的维度 ,且这两个维度都需要进行 扩展 时       B、当一个系统不希望使用 继承 或因为多层次继承导致系统类的 个数急剧增加 时       C、当一个系统需要在构件的抽象化角色和具体化角色之间 增加更多的灵活性 时     (2)装饰者模式:       A、在 不影响 其他 对象 的情况下,以动态、透明的方式给单个对象 添加附加职责       B、当 不能采用继承 的方式对系统进行扩充或者采用继承不利于系统扩展和维护时      

java常用的设计模式学习笔记

一笑奈何 提交于 2019-11-30 21:02:35
资料来源于GoF 1. 根据目的来分 根据模式是用来完成什么工作来划分,这种方式可分为创建型模式、结构型模式和行为型模式 3 种。 创建型模式:用于描述“怎样创建对象”,它的主要特点是“将对象的创建与使用分离”。GoF 中提供了单例、原型、工厂方法、抽象工厂、建造者等 5 种创建型模式。 结构型模式:用于描述如何将类或对象按某种布局组成更大的结构,GoF 中提供了代理、适配器、桥接、装饰、外观、享元、组合等 7 种结构型模式。 行为型模式:用于描述类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,以及怎样分配职责。GoF 中提供了模板方法、策略、命令、职责链、状态、观察者、中介者、迭代器、访问者、备忘录、解释器等 11 种行为型模式。 2. 根据作用范围来分 根据模式是主要用于类上还是主要用于对象上来分,这种方式可分为类模式和对象模式两种。 类模式:用于处理类与子类之间的关系,这些关系通过继承来建立,是静态的,在编译时刻便确定下来了。GoF中的工厂方法、(类)适配器、模板方法、解释器属于该模式。 对象模式:用于处理对象之间的关系,这些关系可以通过组合或聚合来实现,在运行时刻是可以变化的,更具动态性。GoF 中除了以上 4 种,其他的都是对象模式。 来源: https://www.cnblogs.com/codecola/p/11640027.html

从Yii2登陆中看PHP的工厂模式

风格不统一 提交于 2019-11-30 12:44:30
首先,简单介绍下工厂模式: 在大型系统中,许多代码依赖于少数几个关键类。需要更改这些类时,可能会出现困难。例如,假设您有一个从文件读取的 User 类。您希望将其更改为从数据库读取的其他类,但是,所有的代码都引用从文件读取的原始类。这时候,使用工厂模式会很方便。 工厂模式 是一种类,它具有为您创建对象的某些方法。您可以使用工厂类创建对象,而不直接使用 new。这样,如果您想要更改所创建的对象类型,只需更改该工厂即可。使用该工厂的所有代码会自动更改。 1、首先,我们来实现一个简单的工厂模式,代码如下: <?php /* * PHP设计模式 * 工厂模式 */ /** * 接口 */ interface Iuser { function getName(); function getAge(); } /** * 接口实现 */ class User implements Iuser { public $uid; public $user_list = array( '1' => array( 'name' => 'ken', 'age' => '32' ), '2' => array( 'name' => 'nices', 'age' => '13' ), ); public $user; public function __construct($uid) { $this->uid =