工厂模式

设计模式:工厂模式

|▌冷眼眸甩不掉的悲伤 提交于 2020-01-08 14:22:24
一、简单工厂模式 简单工厂模式是指由一个工厂对象决定创建哪一种产品类的实例,但是不属于GoF的23种设计模式。简单工厂模式适用于工厂类负责创建的对象较少的场景,客户端只需要传入工厂类的参数,而对如何创建对象并不关心。 1、产品类的接口及实现类 接口: public interface ICourse { void study(); } 实现类: public class JavaCourse implements ICourse { @Override public void study() { System.out.println("study java"); } } 2、工厂类 工厂类根据传入的ICourse接口的子类的类型来构造实例: public class CourseFactory { public ICourse create(Class<? extends ICourse> type) { if (type == null) { return null; } try { return type.newInstance(); } catch (Exception e) { e.printStackTrace(); } return null; } } 3、应用 public class SimpleFactoryMain { public static void

案例分析:设计模式与代码的结构特性

守給你的承諾、 提交于 2020-01-08 06:16:36
1.什么是创建型模式 创建型模式顾名思义,是一种专注于类的实例化过程的设计模式,它的目标是将创建对象和使用对象的代码分离。外界只需要知道可以通过一组接口来获取对象,而不用关心具体是如何实现的 创建型模式主要以工厂模式为主,这也是本文研究的重心 2.简单工厂模式 想象有一组按钮ButtonA,ButtonB... ...,他们继承自相同的基类Button,实现了规定的接口。简单工厂模式会提供一个类来创建这些按钮的实例,接口调用者只需要提供不同的参数,就可以获得不同的实例 类图如下所示 部分实现代码如下 Factory.cpp #include "Factory.h" #include "ButtonA.h" #include "ButtonB.h" Factory::Factory(){} Factory::~Factory(){} Button* Factory::createButton(string bname) { if(bname=="A") return new ButtonA(); else if(bname=="B") return new ButtonB(); return NULL; } main.cpp int main(int argc, char** argv) { Button* b=Factory::createButton("B"); b-

JavaScript设计模式-工厂模式

一个人想着一个人 提交于 2020-01-06 14:16:56
作者 | Jeskson 掘金 | https://juejin.im/user/5a16e1f3f265da43128096cb 什么是工厂模式,场景为你去买饺子吃,直接点餐,不用自己做,而餐厅要做好饺子(包饺子过程),做好直接卖给客户。 class Product{ constructor(name) { this.name = name } init() { alert('init') } da1() { alert('da1') } da2() { alert('da2') } } class Creator { create(name) { return new Product(name) } } 生成工厂 let creator = new Creator(); // 生成工厂实例 let p = creator.create('p1') p.init() p.da1() jquery class jquery { constructor(selector) { let slice = Array.prototype.slice let dom = slice.call(document.querySelectorAll(selecotr)) let len = dom ? dom.length : 0 for(let i = 0; i<len; i++) { this

java基础——接口和工厂模式

北城余情 提交于 2020-01-04 10:33:33
package proxy; /* * 代理模式:把原对象(被代理类)的一些功能交给代理类处理 * * 安全代理:屏蔽真实角色的直接访问 * 远程代理:通过代理类处理远程方法调用RMI * 延迟加载:先加载轻量级代理对象,需要时通过代理对象再加载真实对象 * 动态生成代理类( 需要反射 ),静态生成代理类 * * */ public class ProxyTest { public static void main(String[] args) { Server server = new Server(); //1.把真实服务器交给代理类 ProxyServer proxyServer = new ProxyServer(server); //2.让代理类联网,实质上就是让真实服务器联网 proxyServer.browse(); } } interface NetWork{ public void browse(); } //被代理类 class Server implements NetWork{ @Override public void browse() { System.out.println("服务器访问网络"); } } //代理类 class ProxyServer implements NetWork{ private NetWork work; public

c++ 工厂模式

时间秒杀一切 提交于 2020-01-02 17:07:35
工厂模式分为3种,即简单工厂模式、工厂方法模式、抽象工厂模式,C++的工厂模式主要利用到虚函数。 简单工厂模式 简单工厂模式有一个工厂,可以生产多个产品,包含两个接口,一个是产品类的,一个是工厂类的。 产品类需要有一个基类,基类中的具体产品实现需要是个纯虚函数,这样一来,产品的子类必须要重写具体的产品实现,实现不同的功能。 产品类封装完成后,还需要一个工厂类,工厂类对产品类再次封装,最终实现由一个工厂对象决定创建出哪一种产品类的实例。 //简单工厂模式 # include <iostream> using namespace std ; //产品的基类 class Product { public : //基类中的纯虚函数 virtual int operation ( int a , int b ) = 0 ; } ; //产品的子类Add class Product_Add : public Product { public : int operation ( int a , int b ) { return a + b ; } } ; //产品的子类Mul class Product_Mul : public Product { public : int operation ( int a , int b ) { return a * b ; } } ; //工厂 class

工厂模式【JavaScript】

孤者浪人 提交于 2020-01-02 16:32:24
工厂模式(Factory) 定义:简单工厂模式是由一个方法来决定到底要创建哪个类的实例, 而这些实例通常都拥有相同的接口(属性和方法)。 举例:计算器(加、减、乘、除)、自行车售卖(山地、公路)、饮料机(咖啡、牛奶、水)、RPG中职业(战士、法师、射手) //工厂模式 : 首先有某个需要创建的具体对象 //把不同的对象放在一个大的类中,把这个类叫做工厂,通过工厂内不同的“方法”来创建不同的对象 //战士 class solider{ constructor(name){ this.name = name; this.label = 'solider'; } init(); } //射手 class shoter{ constructor(name){ this.name = name; this.label = 'shoter'; } } //工厂 class Creator{ createSolider(name){ return new solider(name); } createShoter(name){ return new shoter(name); } } const creator = new Creator(); //创建工厂对象 const p = creator.createSolider('luccy'); //通过工厂对象来创建具体对象 const q =

创建型模式@工厂方法模式 亦称: 虚拟构造函数、­Virtual Constructor、­Factory Method

南楼画角 提交于 2019-12-31 17:58:18
意图 工厂方法模式 是一种创建型设计模式, 其在父类中提供一个创建对象的接口, 允许子类决定实例化对象的类型。 问题 假设你正在开发一款物流管理应用。 最初版本只能处理卡车运输, 因此大部分代码都在位于名为 卡车 的类中。 一段时间后, 这款应用变得极受欢迎。 你每天都能收到十几次来自海运公司的请求, 希望应用能够支持海上物流功能。 如果代码其余部分与现有类已经存在耦合关系, 那么向程序中添加新类其实并没有那么容易。 这可是个好消息。 但是代码问题该如何处理呢? 目前, 大部分代码都与 卡车 类相关。 在程序中添加 轮船 类需要修改全部代码。 更糟糕的是, 如果你以后需要在程序中支持另外一种运输方式, 很可能需要再次对这些代码进行大幅修改。 最后, 你将不得不编写繁复的代码, 根据不同的运输对象类, 在应用中进行不同的处理。 解决方案 工厂方法模式建议使用特殊的 工厂 方法代替对于对象构造函数的直接调用 (即使用 new 运算符)。 不用担心, 对象仍将通过 new 运算符创建, 只是该运算符改在工厂方法中调用罢了。 工厂方法返回的对象通常被称作 “产品”。 子类可以修改工厂方法返回的对象类型。 乍看之下, 这种更改可能毫无意义: 我们只是改变了程序中调用构造函数的位置而已。 但是, 仔细想一下, 现在你可以在子类中重写工厂方法, 从而改变其创建产品的类型。 但有一点需要注意

【python基础】单例模式 & 工厂模式 & 策略模式 & 观察者模式

心不动则不痛 提交于 2019-12-29 22:13:03
一、单例模式   单例:单个实例,确保某个类只有一个实例存在   举例:1、登录app,当前的登录对象,只能有一个      2、音乐播放器,正在播放的歌曲类而言,只能有一个实例 1 import my_util # 被导入的模块会从头到尾执行一遍 2 3 o1 = my_util.a 4 o2 = my_util.a 5 o3 = my_util.a 6 7 print(o1) 8 print(o2) 9 print(o3) 10 11 12 class Person: 13 __obj = None # 单例 14 15 def __new__(cls, *args, **kwargs): # 创建实例对象 ---> 实例 16 17 if not cls.__obj: 18 cls.__obj = super().__new__(cls) 19 return cls.__obj 20 21 def __init__(self): # 自己,本身; 谁调用谁就是self; 实际上,在调用init时, 实例对象已经被创建出来了; 22 pass 23 24 25 p1 = Person() # 1. 调用new方法,创建实例对象, 开辟内存空间, 存储对象 2. 自动调用init方法 26 p2 = Person() 27 28 print(p1) # <__main__

设计模式之工厂模式

拜拜、爱过 提交于 2019-12-28 15:42:40
定义 定义一个创建对象的接口,但由子类决定要实例的类是哪一个。工厂方法让类把实例推迟到子类。 设计原则 要依赖抽象,不要依赖具体的类:不能让高层组件依赖于底层组件,并且两者都应该依赖于抽象。 指导方针 变量不可以持有具体类的引用:如果使用new,就会持有具体类的引用。可以用工厂来避开这样的做法。 不要让类派生自具体类:如果派生自具体类,你就会依赖具体类。派生自一个抽象。 不要覆盖基类中已实现的方法:如果覆盖基类已实现的方法,那么你的基类就不是一个真正适合被继承的抽象。基类中所有实现的方法,应该由所有子类共享。 抽象工厂模式 提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定的具体类。 第一次设计(识别变化) 假设我们有一个披萨店,我们需要写代码来制造一些不同类型的披萨。 下面来看看我们最开始的设计: Pizza orderPizza(string type) { Pizza pizza; if (type.Equals("cheese")) { pizza = new CheesePizza(); } else if (type.Equals("greek")) { pizza = new GreekPizza(); } else if (type.Equals("pepperoni")) { pizza = new PepperoniPizza(); } else {

Spring依赖注入实现工厂模式

你。 提交于 2019-12-27 20:28:28
文章目录 工厂模式介绍 1、简介: 2、什么情况下使用: 三类工厂模式 1、简单工厂模式: 2、工厂方法模式 3、抽象工厂模式 Spring IOC和工厂模式的对比 用Spring IOC实现工厂模式DEMO(优化抽奖活动配置) 扩展-设计模式的分类 工厂模式介绍 1、简介:   工厂模式是属于23种设计模式中的一种常用的创建型模式(另外两种:结构型、行为型),它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口(抽象类)来指向新创建的对象。创建型模式常和行为型模式配合使用。 2、什么情况下使用: (1)在编码时不能预见需要创建哪种类的实例。 (2)系统不依赖于产品类实例如何被创建、组合和表达的细节 三类工厂模式 1、简单工厂模式: (1)简介:简单工厂模式又叫做静态工厂方法(Static Factory Method)模式,不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。 (2)三个角色:抽象产品、具体产品、产品工厂 (3)DEMO (4)优缺点:   优点:简单工厂模式能够根据外界给定的信息,决定创建哪个具体类的对象。明确区分了各自的职责和权力,有利于整个软件体系结构的优化。   缺点