工厂模式

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

三世轮回 提交于 2019-12-08 18:46:34
参考: http://c.biancheng.net/view/1320.html https://www.runoob.com/design-pattern/factory-pattern.html 一、设计模式 简介: 设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的,具有一定的普遍性,可以反复使用。其目的是为了提高代码的可重用性、代码的可读性和代码的可靠性。 设计模式的划分: 根据模式是用来完成什么工作来划分,可分为创建型模式、结构型模式和行为型模式 3 种: 创建型模式:用于描述“怎样创建对象”,它的主要特点是“将对象的创建与使用分离”。包括单例、原型、工厂方法、抽象工厂、建造者等 5 种创建型模式。 结构型模式:用于描述如何将类或对象按某种布局组成更大的结构,包括代理、适配器、桥接、装饰、外观、享元、组合等 7 种结构型模式。 行为型模式:用于描述类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,以及怎样分配职责。包括模板方法、策略、命令、职责链、状态、观察者、中介者、迭代器、访问者、备忘录、解释器等 11 种行为型模式。 二、java与工厂模式 意图:

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

不想你离开。 提交于 2019-12-08 17:23:31
工厂模式细分三种:简单工厂模式、工厂模式、抽象工厂模式。 工厂模式相当于抽象了简单工厂模式的工厂类,而抽象工厂模式在工厂模式的基础上加上了产品族的概念。我选用的是抽象工厂模式来完成本次作业。 定义:是一种为访问类提供一个创建一组相关或相互依赖对象的接口,且访问类无须指定所要产品的具体类就能得到同族的不同等级的产品的模式结构。 使用条件:1)系统中有多个产品族,每个具体工厂创建同一族但属于不同等级结构的产品。2)系统一次只可能消费其中某一族产品,即同族的产品一起使用 功能:抽象工厂模式的一个主要功能是它能够隔离要生成的具体产品类, 由于这些类的实际类名部被隐藏在工厂内部,因此客户端根本不需要关心如何对它们进行实例化的细节。每种设计模式都是针对特定问题的解决方案,而抽象工厂模式面临的问题则是当涉及到有多个产品等级结构寸,如何更好地进行软件体系结构的设计。 场景:对数据库中的表进行修改 结构图: 1) User表的定义: 2) 定义接口 3) 实现对mysql中User进行操作的类 实现对oracle中User进行操作的类 4) 定义一个工厂接口,用于生产访问User表的对象 5) 生产mysqlUser对象的mysql工厂类 生产oracleUser对象的oracle工厂类 6) 用户测试类 优点: 1)抽象工厂模式最大的好处是易于交换产品系列,由于具体工厂类,例如 IFactory

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

試著忘記壹切 提交于 2019-12-08 15:09:34
概述 设计模式 :设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的;设计模式使代码编制真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。 设计模式的特点 :设计模式可以增强我们的代码的可读性,增强我们代码的可维护性,可以充分的实现我们的代码复用的原则。 我选择的是 工厂模式, 工厂设计模式是一种创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。 对于简单工厂模式, 工厂方法模式定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。工厂方法模式中是一个子类对应一个工厂类,而这些工厂类都实现于一个抽象接口。这相当于是把原本会因为业务代码而庞大的简单工厂类,拆分成了一个个的工厂类,这样代码就不会都耦合在同一个类里了。 结构如下所示: 下面是一个实例结构图及分析 1)首先定义 1)首先定义一个工厂接口 import org.zero01.operation.Operation; public interface Factory { public Operation

设计模式与代码的结构特性

六眼飞鱼酱① 提交于 2019-12-08 11:28:29
设计模式与代码的结构特性 我的CSDN: https://blog.csdn.net/P71720/article/details/103443116 工厂模式 什么是工厂模式?简单的说就是,就是生产对象的一种方式。 在看到本次高软作业的时候,大脑突然就想到了Mybatis的工厂模式和代理模式,正好选用Mybatis的工厂模式来举例说明工厂模式的优势和特性。 工厂模式的优势 个人体会工厂模式的优势在于: 1.封装了很多细节,使开发者可以将更多的经历投入到事务的实现上。 2.降低了类之间的依赖,即解耦。 3.扩展起来也是更加方便。 那么,下面就根据Mybatis代码来分析上面的优势。 代码分析 Mybatis在读取完配置文件后,要创建SqlSessionFactory,即SqlSession工厂,通过工厂生产一个SqlSession对象,然后使用SqlSession创建Dao接口的代理对象(这里用了代理模式,此处暂不介绍)。 那么什么是SqlSessionFactory呢?让我们点进去康康,发现: 可以看到,就是个接口,里面对应不同的传参构建了不同的参数,我们上面调用里面的函数大概就是: 这样,当我们需要实现不同的实体类并实现各种各样的方法时就不会凌乱的放在dao包中了,而是统一的利用工厂生成SqlSession创建实体类的代理对象从而调用SelectList方法

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

断了今生、忘了曾经 提交于 2019-12-08 11:26:30
@font-face{ font-family:"Times New Roman"; } @font-face{ font-family:"宋体"; } @font-face{ font-family:"Calibri"; } @font-face{ font-family:"sans-serif"; } @font-face{ font-family:"Operator Mono"; } p.MsoNormal{ mso-style-name:正文; mso-style-parent:""; margin:0pt; margin-bottom:.0001pt; mso-pagination:none; text-align:justify; text-justify:inter-ideograph; font-family:Calibri; mso-fareast-font-family:宋体; mso-bidi-font-family:'Times New Roman'; font-size:10.5000pt; mso-font-kerning:1.0000pt; } h3{ mso-style-name:"标题 3"; mso-style-noshow:yes; mso-style-next:正文; margin-top:13.0000pt; margin-bottom

设计模式——享元模式

回眸只為那壹抹淺笑 提交于 2019-12-08 10:37:33
一、什么是享元模式   说到享元模式,第一个想到的应该就是池技术了,String常量池、数据库连接池、缓冲池等等都是享元模式的应用,所以说享元模式是池技术的重要实现方式。   比如我们每次创建字符串对象时,都需要创建一个新的字符串对象的话,内存开销会很大,所以如果第一次创建了字符串对象“adam“,下次再创建相同的字符串”adam“时,只是把它的引用指向”adam“,这样就实现了”adam“字符串再内存中的共享。   举个最简单的例子,网络联机下棋的时候,一台服务器连接了多个客户端(玩家),如果我们每个棋子都要创建对象,那一盘棋可能就有上百个对象产生,玩家多点的话,因为内存空间有限,一台服务器就难以支持了,所以这里要使用享元模式,将棋子对象减少到几个实例。下面给出享元模式的定义。    享元模式(Flyweight) ,运用共享技术有效地支持大量细粒度的对象。UML结构图如下:   其中,Flyweight是抽象享元角色。它是产品的抽象类,同时定义出对象的外部状态和内部状态(外部状态及内部状态相关内容见后方)的接口或实现;ConcreteFlyweight是具体享元角色,是具体的产品类,实现抽象角色定义的业务;UnsharedConcreteFlyweight是不可共享的享元角色,一般不会出现在享元工厂中;FlyweightFactory是享元工厂,它用于构造一个池容器

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

点点圈 提交于 2019-12-07 18:44:27
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-

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

女生的网名这么多〃 提交于 2019-12-07 16:05:42
我的工程实践项目是Java Web相关,使用了Spring框架。 在Java面向过程的概念中:一切皆对象!但是大量对象的创建、调用和删除在大型项目中是一件很复杂的事情,而Spring框架大大简化了这一过程。众所周知,Spring框架的核心就是IOC,把对象的创建、管理和删除全部交给IOC容器管理。这就免不了工厂模式的使用。 那么什么是工厂模式? 举一个简单的例子。假如我们制作一款绘图工具。可以绘制圆形,正方形,三角形等各种图形,每个图形都有一个draw()方法用于绘图。如果我们需要创建一个图形,对于Java面向对象来说,我们并不需要亲自去绘制,只需要下达相关的指令,由能够解析指令的工具自动帮我们完成就好。在工厂模式中,工厂类就是这个能解析指令自动完成的重要工具,我们把所有的逻辑业务都交给工厂去办。 为什么要用工厂模式? 对于调用者来说,工厂模式隐藏了复杂的逻辑处理过程,调用者只关心执行结果,而由工厂类保证生产出符合规范的产品。有以下三个好处: (1) 解耦 :把对象的创建和使用的过程分开。 (2) 降低代码重复: 如果创建某个对象的过程都很复杂,需要一定的代码量,而且很多地方都要用到,那么就会有很多的重复代码。 (3) 降低维护成本 :由于创建过程都由工厂统一管理,所以发生业务逻辑变化,不需要找到所有需要创建对象B的地方去逐个修正,只需要在工厂里修改即可,降低维护成本。

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

心不动则不痛 提交于 2019-12-07 14:00:29
简单工厂模式,通过工厂类提供的方法,传入参数,工厂方法根据参数判断要创建什么样的对象返回 工厂方法模式:定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。创建一个工厂接口,具体实现是由其实现类实现。 抽象工厂模式:抽象工厂模式提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类 引用关键代码,解释该设计模式在该应用场景中的适用性: 工厂模式: #创建一个区块工厂类 class BlockFactory(): def newBlock(self,data,prevBlockHash): #生成一个默认区块对象 block = Block(time.time(),data,prevBlockHash,"") #获取并设置该区块hash block.setHash() return block #创建一个创世区块工厂类 class GenesisBlockFactory(): #新生成一个创世区块 def mineNewBlock(self,data,prevBlockHash): block = self.newBlock(data,prevBlockHash) #开始挖矿,要求前n位数值为零,以此作为工作量证明 nonce,hashedData = work.runNewProofOfWork(block) block.hash = hashedData

【C++设计模式】工厂模式

限于喜欢 提交于 2019-12-06 22:32:39
最近打算总结一下设计模式(希望可以坚持写完...)。 设计模式大体上可以分为三种: 1)创建型(5种) 具体包括:工厂方法(包括简单工厂),抽象工厂,单例,建造者,原型 2)结构型模式(7种) 具体包括:适配器,桥接,组合,装饰器,代理,外观,享元 3)行为型模式(11种) 具体包括:策略模式,模版方法,命令,职责链,状态,观察者,中介者,迭代器,访问者,备忘录,解释器 创建型模式的技巧主要应用于创建对象的方式上。 结构性模式的技巧主要在于对不同类之间的组合以实现代码复用。 行为型模式的技巧在于不同类之间的相互作用及相互影响。 创建型模式 1)简单工厂模式 简单工厂一般只包含一个工厂,以及产品抽象类及其子类。 优点:实现了对象的创建与使用的分离。 缺点: 每增加一个产品都要修改原来的代码,且需要不断增加新的逻辑。 enum fruits{ APPLE, GRAPE } //果汁抽象类 class Juice{ public: virtual void show() = 0; } //果汁具体类,苹果汁 class AppleJuice : public Juice{ public: void show(){ cout<<"AppleJuice"<<endl; } } //果汁具体类,葡萄汁 class GrapeJuice : public Juice{ public: void