简单工厂模式

具体聊一聊简单工厂模式、工厂方法模式和抽象工厂模式

二次信任 提交于 2019-12-03 02:40:58
1.工厂模式简介 In class-based programming, the factory method pattern is a creational pattern that uses factory methods to deal with the problem of creating objects without having to specify the exact class of the object that will be created. ( 在基于类的编程中,工厂方法模式是一种创建模式,它使用工厂方法来处理创建对象的问题,而不必指定将要创建的对象的确切类。) ——引用自维基百科 ​ 通过上面的描述我们可以通过一个基类来创建多个子类,然后实现相应的方法,最后调用基类中的方法(工厂方法)来返回某个子类实例,并加以运用。这种方式增强了类的复用性和可扩展性。 2.工厂模式的类型 工厂模式主要有以下几种类型: ​ ①简单工厂模式:通过传入相关的类型来确切的返回相应的类,这种方式比较单 一,可扩展性相对较差; ②工厂方法模式:通过实现类实现相应的方法来决定相应的返回结果,这种方式的可扩展性比较强; ③抽象工厂方法模式:这个模式是以上模式的扩展,相比工厂方法而言,它所能生产的不只是一种产品,还可以是一组产品。 工厂模式的优点: 解耦 :把对象的创建和使用的过程分开

工厂方法模式(FactoryFunction)

匿名 (未验证) 提交于 2019-12-03 00:27:02
  在简单工厂模式中讲到简单工厂模式的缺点,有一点是―― 简单工厂模式系统难以扩展,一旦添加新产品就不得不修改简单工厂方法 ,这样就会造成简单工厂的实现逻辑过于复杂,工厂方法模式可以解决简单工厂模式中存在的这个问题,下面就具体看看工厂模式是如何解决该问题的。   工厂方法模式之所以可以解决简单工厂的模式,是因为它的实现把具体产品的创建推迟到子类中,此时工厂类不再负责所有产品的创建,而只是给出具体工厂必须实现的接口,这样工厂方法模式就可以允许系统不修改工厂类逻辑的情况下来添加新产品,这样也就克服了简单工厂模式中缺点。 文章来源: 工厂方法模式(FactoryFunction)

简单工厂模式

匿名 (未验证) 提交于 2019-12-03 00:17:01
简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式。 优点 工厂类是整个模式的关键.包含了必要的逻辑判断,根据外界给定的信息,决定究竟应该创建哪个具体类的对象.通过使用工厂类,外界可以从直接创建具体产品对象的尴尬局面摆脱出来,仅仅需要负责“消费”对象就可以了。而不必管这些对象究竟如何创建及如何组织的.明确了各自的职责和权利,有利于整个 软件体系结构 的优化。 缺点 由于工厂类集中了所有实例的创建逻辑,违反了 高内聚 责任分配原则,将全部创建逻辑集中到了一个工厂类中;它所能创建的类只能是事先考虑到的,如果需要添加新的类,则就需要改变工厂类了。 当系统中的具体产品类不断增多时候,可能会出现要求工厂类根据不同条件创建不同实例的需求.这种对条件的判断和对具体产品类型的判断交错在一起,很难避免模块功能的蔓延,对系统的维护和扩展非常不利; 这些缺点在 工厂方法模式 中得到了一定的克服。 代码实现 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DesignPattern { class Program { static void Main

一.简单工厂模式

匿名 (未验证) 提交于 2019-12-03 00:05:01
创建型 模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一 。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例 。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。 工厂(Creator)角色 简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。 工厂类 的创建产品类的方法可以被外界直接调用,创建所需的产品对象。 抽象产品(Product)角色 简单工厂模式所创建的所有对象的 父类 ,它负责描述所有实例所共有的 公共接口。 具体产品(Concrete Product)角色 是简单工厂模式的 创建目标 ,所有创建的对象都是充当这个角色的某个具体类的实例。 说起操作系统,市面上大概可以分为三种: Windows操作系统 Linux操作系统 Mac OS操作系统, SayHello() 方法,和用户打招呼,需求来了就得办事,接下来秀出代码。 static void Main(string[] args) { Console.WriteLine("请选择你的操作系统:\r\n"); Console.WriteLine("A.Windows操作系统\r\n"); Console.WriteLine("B.Linux操作系统\r\n"); Console.WriteLine("C.Mac

05、工厂模式-简单工厂模式(静态工厂模式)

匿名 (未验证) 提交于 2019-12-02 23:43:01
2019独角兽企业重金招聘Python工程师标准>>> 工厂模式包含多种形态,每种形态对应的实际情况不同,具体为以下三类: 简单工厂模式 simple factory 工厂方法模式 Factory method 使用工厂模式的目的在于 : 对象的实例化从客户端代码中转移到非客户端代码中 -- 也就是实现 客户端和业务端的解耦 如果以 public static void main 看做是 客户端代码,那么 工厂类的模式就表示,在 main方法中,如果你要使用类A或者类B,那么在main方法中看不到 new A()或者 new B()等代码,而是在创建这些类的工厂类中才可以看到。 简单 属于类创建模式,又叫做静态工厂模式(static factory)。 使用简单工厂模式,在实际的环境中,一般有四个参与者(角色),分别: 工厂类角色:直接产品角色的调用者 抽象产品角色:接口或抽象类,负责具体产品角色的定义,及与客户端的交互。 具体产品角色:被工厂类创建的对象,也是客户端实际操作对象 客户端:调用工厂类产生实例,并调用实例的方法进行相应工作 包含例子如下: package com . yp ; /** * 定义 People 抽象类 * @author Administrator */ public abstract class People { abstract void say (

简单工厂模式

匿名 (未验证) 提交于 2019-12-02 23:39:01
  简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Factory Method)模式。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。   简单工厂就是将多个if,else...代码块拆开,增加代码的可阅读性、便于后期的维护。一个接口,几个实现接口的类,再通过传参的形式在工厂类中根据类型去创建相应的具体类。 其结构如下图:   以最简单的加减乘除运算为例,建立一个通用的运算接口,其有两个抽象方法:一个是描述运算类型,另一个是具体的运算。UML类图如下: 对应的代码如下: package cn.qlq; public interface Operation { String operateType(); Number operate(Number... nums); } package cn.qlq; public class OperationAdd implements Operation { @Override public String operateType() { return "OperationAdd"; } @Override public Number operate(Number... nums) { Number result = 0; for (Number number : nums) { result = result

简单工厂模式、工厂模式和抽象工厂模式区别及优缺点

岁酱吖の 提交于 2019-12-02 23:01:48
(本文实现语言为Python3) 【前言】 众所周知今天所讲的内容是设计模式的一类;对于设计模式这个概念,我想首先请大家问问自己:1、什么是设计模式 2、我们为什么要了解并学习设计模式? 从我上学的时候我相信大家跟我一样也接触过设计模式的课程,当时可能懵懵懂懂只是知其然,当时还会想明明可以直接写出来为什么要搞成这样的形式,我就算学会了它到底什么时候能用呢?一系列的问题...Emm算了到时候再想想(lazy)。随着实践的不断增多,现在我想可以对这些问题有个初步的回答了:   1、在我看来,设计模式外在看 是经过前人不断实践总结出的针对某些指定场景极其好用的一种代码结构设计模板 ;内在看其实是一种 设计思想 (即为什么他们会这么想,这样想较之其他方法有什么好处)。当我们真正的理解设计思想的时候,就可能会在面对问题和场景时自然而然的灵活运用到多种设计模式,而不是单一的刻板结构。   2、在工程化的开发中,需求往往是会不断变化的,这也是让很多开发人员及其烦躁的地方,所以才会有开发与产品的亲密关系。 设计模式就是为了抵御外部需求变化产生的 。 设计模式应符合开闭原则( 类、模块和函数等应该对扩展开放,对修改关闭。 )一个好的设计在之后的开发中,包括发生重大需求变化的时候,往往代码只需要进行简单重构去进行适配,而不是通过打补丁的方式去堆砌,也很容易避免破窗效应,充分的发挥了灵活的扩展和适配

创建型模式

蹲街弑〆低调 提交于 2019-12-02 21:44:14
设计模式六大原则: https://www.jianshu.com/p/807bc228dbc2 简单工厂模式: 简单工厂模式(Simple Factory Pattern):又称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式。在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。 可以理解为负责生产对象的类。 简单工厂模式的重点在于:当你需要什么,只需要传入一个正确的参数,就可以获取你所需要的对象,而无需知道创建细节。 简书: https://www.jianshu.com/p/e55fbddc071c 工厂方法模式: 工厂方法模式(Factory Method Pattern)又称为工厂模式,也叫虚拟构造器(Virtual Constructor)模式或者多态工厂(Polymorphic Factory)模式,它属于类创建型模式。在工厂方法模式中,工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象,这样做的目的是将产品类的实例化操作延迟到工厂子类中完成,即通过工厂子类来确定究竟应该实例化哪一个具体产品类。 符合开闭原则(对拓展开放,对修改关闭) 简书: https://www.jianshu.com/p/d0c444275827

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

夙愿已清 提交于 2019-12-02 15:58:50
简单工厂设计模式 工厂模式就是专门负责将大量有共同接口的类实例化,而且不必事先知道每次是要实例化哪一个类的模式。它定义一个用于创建对象的接口,由子类决定实例化哪一个类。 核心知识点如下: (1) 大量共同定义的接口。 (2) 由不同的对象去实现该接口。 (3) 子类(具体工厂类)决定实例化哪一个类(具体产品类)有着“一对一”的关系。 前言(也算是工厂的一个应用需求场景吧) 最近在构建自动化测试平台,公司需求是:必须在IE,火狐,Google浏览器下回归测试用例。Selenium的webdriver支持以上浏览器。在返回浏览器WebDriver对象时,刚好和工厂模式设计契合。于是又回顾了一下工厂模式,留下笔记分享给工厂模式学习者和自动化测试平台的构建者,理解不足之处请各位大神不吝赐教。 1,定义WebDriver(这里是为了说明工厂模式,简单的模拟Selenium的webdriver,Selenium的Jar中有此类) package factory; /** * 简单的模拟 WebDriver的几个功能来说明工厂模式问题 * Selenium的Jar中有此类,且方法远远多于此 * @author Administrator * */ public interface WebDriver { //打开页面 public void openURL(String prmUrl); /

简单工厂模式、工厂模式和抽象工厂模式区别及优缺点

你说的曾经没有我的故事 提交于 2019-12-02 08:36:30
各位小伙伴好,今天给大家主要介绍一下简单工厂模式、工厂模式和抽象工厂模式的区别及各自的优缺点。 (本文实现语言为Python3) 【前言】 众所周知今天所讲的内容是设计模式的一类;对于设计模式这个概念,我想首先请大家问问自己: 1、什么是设计模式 2、我们为什么要了解并学习设计模式? 从我上学的时候我相信大家跟我一样也接触过设计模式的课程,当时可能懵懵懂懂只是知其然,当时还会想明明可以直接写出来为什么要搞成这样的形式,我就算学会了它到底什么时候能用呢?一系列的问题...Emm算了到时候再想想(lazy)。随着实践的不断增多,现在我想可以对这些问题有个初步的回答了:   1、在我看来,设计模式外在看 是经过前人不断实践总结出的针对某些指定场景极其好用的一种代码结构设计模板 ;内在看其实是一种 设计思想 (即为什么他们会这么想,这样想较之其他方法有什么好处)。当我们真正的理解设计思想的时候,就可能会在面对问题和场景时自然而然的灵活运用到多种设计模式,而不是单一的刻板结构。   2、在工程化的开发中,需求往往是会不断变化的,这也是让很多开发人员及其烦躁的地方,所以才会有开发与产品的亲密关系。 设计模式就是为了抵御外部需求变化产生的 。 设计模式应符合开闭原则( 类、模块和函数等应该对扩展开放,对修改关闭。 )一个好的设计在之后的开发中,包括发生重大需求变化的时候