工厂类

IOC与反射

北城余情 提交于 2019-12-10 00:50:19
反射 反射听起来高大上,其实就可以理解为:通过类的路径(就是个字符串)来new一个类: IOC 依赖注入,依赖注入的好处就是:如果你的程序中new一个类是需要动态new的,那么得到这个需要new的类的名称之后,就可以动态new出来。 我理解IOC就像工厂方法+反射动态生成对象。 举个例子: 假设有这些类 class food { } class apple extends food { void eat ( ) { System.out.println ( "apple" ) ; } } class banana extends food { void eat ( ) { System.out.println ( "banana" ) ; } } 我们程序中会动态生成今天吃的食物的名称是apple还是banana,如果是apple就要求返回一个apple对象,如果想吃banana就要求返回一个banana对象。为了应对这种需求,我们可以写出一个工厂类: class Factory { food getFood ( String name ) { if ( name.equals ( "apple" )) { return new apple ( ) ; } else if ( name.equals ( "banana" )) { return new banana ( ) ; }

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

半腔热情 提交于 2019-12-08 21:38:41
一、什么是软件设计模式 1、概念   软件设计模式(Design pattern),又称设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。 2、作用   使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。 3、分类 软件设计模式一般可分为以下几类: (1)创建模式   a. 抽象工厂模式(Abstract Factory):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。   b. 生成器模式( Builder):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。   c. 工厂方法模式(Factory Method):定义一个用于创建对象的接口,让子类决定将哪一个类实例化。Factory Method使一个类的实例化延迟到其子类。   d. 原型模式(Prototype):用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象。   e. 单例模式(Singleton):保证一个类仅有一个实例,并提供一个访问它的全局访问点。 (2)结构模式   a. 适配器模式 (Adapter) :将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。   b. 桥接模式(Bridge)

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

百般思念 提交于 2019-12-08 20:37:31
一、设计模式简介   设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。   设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。项目中合理地运用设计模式可以完美地解决很多问题,每种模式在现实中都有相应的原理来与之对应,每种模式都描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是设计模式能被广泛应用的原因。 二、设计模式的分类   设计模式主要可以分为三大类:创建型模式(Creational Patterns)、结构型模式(Structural Patterns)、行为型模式(Behavioral Patterns)。   创建型模式包括:工厂模式、抽象工厂模式、单例模式、建造者模式、原型模式。   结构型模式包括:适配器模式、桥接模式、过滤器模式、组合模式、装饰器模式、外观模式、享元模式和代理模式。   行为型模式包括:责任链模式、命令模式、解释器模式

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

三世轮回 提交于 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 16:38:29
我选择的设计模式是抽象工厂模式。 工厂方法模式的一个重大缺陷: 一个工厂子类只能创建一个产品子类 抽象工厂模式的出现就是为了解决这一难题: 其特点是抽象工厂中每个工厂可以创建多种产品子类 主要用途: 允许使用抽象的接口来创建一组相关产品,而不需要知道该产品具体是什么, 使用步骤: 1创建抽象工厂类,定义具体工厂的公共接口 2创建抽象产品族类,定义抽象产品的公共接口 3创建产品类,(继承抽象产品族类,定义具体产品的公共接口) 4创建具体产品类(继承产品类,定义具体的生厂产品) 5创建具体工厂类(继承抽象工厂类,创建客户所需要产品) 6客户端通过实例化具体的工厂类,并调用其方法创建不同的产品 相比工厂方法模式,该抽象工厂模式多了一个产品族类,将产品进行分类,这样在一个具体工厂类中,就可以创建一组产品类了 接下来我就用一个实际例子来说明吧! 1创建抽象工厂类,定义具体工厂的公共接口 package CXGCMS; public abstract class Factory{ public abstract AbstractProduct ShowFirst(); public abstract AbstractProduct ShowSecond(); } 2创建抽象产品类,定义抽象产品组类的公共接口 package CXGCMS; public abstract class

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

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

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

点点圈 提交于 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-06 22:39:27
软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径。设计模式中运用了面向对象编程语言的重要特性:封装、继承、多态。 本文对工厂模式进行详细讲解。 一、设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 此外还有两种:并发型模式和线程池模式。 二、设计模式的总原则和六大原则 总原则: 开闭原则(Open Close Principle) 开闭原则就是说对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,而是要扩展原有代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类等,后面的具体设计中我们会提到这点。 六大原则   1、单一职责原则:不要存在多于一个导致类变更的原因,也就是说每个类应该实现单一的职责,如若不然,就应该把类拆分。   2、里氏替换原则(Liskov Substitution Principle) 里氏代换原则中说,任何基类可以出现的地方

享元模式

时间秒杀一切 提交于 2019-12-06 13:49:03
享元模式 享元模式(Flyweight Pattern):也叫蝇量模式,运用共享技术有效地支持大量细粒度对象的复用。系统只使用少量的对象,而这些对象都很相似,状态变化很小,可以实现对象的多次复用。由于享元模式要求能够共享的对象必须是细粒度对象,因此它又称为轻量级模式,它是一种对象结构型模式 享元类的设计是享元模式的要点之一,在享元类中要将内部状态和外部状态分开处理,通常将内部状态作为享元类的成员变量,而外部状态通过注入的方式添加到享元类中 享元模式常用于系统底层开发,解决系统的性能问题。像数据库连接池,里面都是创建好的连接对象,在这些连接对象中有我们需要的则直接拿来用,避免重新创建,如果没有我们需要的,则创建一个 享元模式能够解决重复对象的内存浪费的问题,当系统中有大量相似对象,需要缓冲池时。不需总是创建新对象,可以从缓冲池里拿。这样可以降低系统内存,同时提高效率 享元模式经典的应用场景就是池技术了,String 常量池、数据库连接池、缓冲池等等都是享元模式的应用,享元模式是池技术的重要实现方式 Flyweight(抽象享元类):通常是一个接口或抽象类,在抽象享元类中声明了具体享元类公共的方法,这些方法可以向外界提供享元对象的内部数据(内部状态),同时也可以通过这些方法来设置外部数据(外部状态)。 ConcreteFlyweight(具体享元类):它实现了抽象享元类