实验1 简单工厂模式

实验1 简单工厂模式
实验1 简单工厂模式

实验1 简单工厂模式

【实验目的】

掌握简单工厂模式的定义、结构及实现方式。

【实验内容】

某软件公司要基于C#语言开发一套图表库,该图表库可以为应用系统提供多种不同外观的图表,例如柱状图(HistogramChart)、饼状图(PieChart)、折线图(LineChart)等。该软件公司图表库设计人员希望为应用系统开发人员提供一套灵活易用的图表库,通过设置不同的参数即可得到不同类型的图表,而且可以较为方便地对图表库进行扩展,以便能够在将来增加一些新类型的图表。

现使用简单工厂模式来设计该图表库。

REF

简单工厂模式包含以下3个角色:

Factory(工厂角色)

Product(抽象产品角色)

ConcreteProduct(具体产品角色)

实验步骤:

1.项目的构成:

2 .实现项目的主要代码(1)Chart内部代码

(2) ChartFactory内部代码

(3) HistogramChart内部代码

(4) PieCharts 内部代码

(5) LineChart 内部代码

(6) class Program内部代码

3.运行结果:

【实验总结】

通过本次实验了解和学习了简单工厂的用法,掌握简单工厂模式的定义、结构及实现方式。学习了在实际软件的项目开发中合理地使用简单工厂模式.

软件设计模式复习

创建型模式概述 创建型模式(Creational Pattern)对类的实例化过程进行了抽象,能够将软件模块中对象的创建和对象的使用分离。为了使软件的结构更加清晰,外界对于这些对象只需要知道它们共同的接口,而不清楚其具体的实现细节,使整个系统的设计更加符合单一职责原则。 模式动机 考虑一个简单的软件应用场景,一个软件系统可以提供多个外观不同的按钮(如圆形按钮、矩形按钮、菱形按钮等),这些按钮都源自同一个基类,不过在继承基类后不同的子类修改了部分属性从而使得它们可以呈现不同的外观,如果我们希望在使用这些按钮时,不需要知道这些具体按钮类的名字,只需要知道表示该按钮类的一个参数,并提供一个调用方便的方法,把该参数传入方法即可返回一个相应的按钮对象,此时,就可以使用简单工厂模式。模式定义 简单工厂模式(Simple Factory Pattern):又称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式。在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。 模式分析 将对象的创建和对象本身业务处理分离可以降低系统的耦合度,使得两者修改起来都相对容易。 在调用工厂类的工厂方法时,由于工厂方法是静态方法,使用起来很方便,可通过类名直接调用,而且只需要传入一个简单的参数即可,在实际开发中,还可以在调用时将所传入的参数保存在XML等格式的配置文件中,修改参数时无须修改任何Java源代码。 简单工厂模式最大的问题在于工厂类的职责相对过重,增加新的产品需要修改工厂类的判断逻辑,这一点与开闭原则是相违背的。 简单工厂模式的要点在于:当你需要什么,只需要传入一个正确的参数,就可以获取你所需要的对象,而无须知道其创建细节。 简单工厂模式的不足 在简单工厂模式中,只提供了一个工厂类,该工厂类处于对产品类进行实例化的中心位置,它知道每一个产品对象的创建细节,并决定何时实例化哪一个产品类。简单工厂模式最大的缺点是当有新产品要加入到系统中时,必须修改工厂类,加入必要的处理逻辑,这违背了“开闭原则”。在简单工厂模式中,所有的产品都是由同一个工厂创建,工厂类职责较重,业务逻辑较为复杂,具体产品与工厂类之间的耦合度高,严重影响了系统的灵活性和扩展性,而工厂方法模式则可以很好地解决这一问题。 模式动机 考虑这样一个系统,按钮工厂类可以返回一个具体的按钮实例,如圆形按钮、矩形按钮、菱形按钮等。在这个系统中,如果需要增加一种新类型的按钮,如椭圆形按钮,那么除了增加一个新的具体产品类之外,还需要修改工厂类的代码,这就使得整个设计在一定程度上违反了“开闭原则”。 模式定义 工厂方法模式(Factory Method Pattern)又称为工厂模式,也叫虚拟构造器(Virtual Constructor)模式或者多态工厂(Polymorphic Factory)模式,它属于类创建型模式。在工厂方法模式中,工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象,这样做的目的是将产品类的实例化操作延迟到工厂子类中完成,即通过工厂子类来确定究竟应该实例化哪一个具体产品类。 模式分析 工厂方法模式是简单工厂模式的进一步抽象和推广。由于使用了面向对象的多态性,工厂方

工厂模式有以下几种形态

工厂模式有以下几种形态: 简单工厂(Simple Factory)模式 工厂方法(Factory Method)模式,又称多形性工厂(Polymorphic Factory)模式 抽象工厂(Abstract Factory)模式,又称工具箱(Kit或Toolkit)模式 在简单工厂模式中,一个工厂类处于对产品类实例化调用的中心位置上,它决定那一个产品类应当被实例化, 如同一个交通警察站在来往的车辆流中,决定放行那一个方向的车辆向那一个方向流动一样。 工厂方法模式是简单工厂模式的进一步抽象化和推广,工厂方法模式里不再只由一个工厂类决定那一个产品类应当被实例化,这个决定被交给子类去作。

工厂方法模式和简单工厂模式在定义上的不同是很明显的。工厂方法模式的核心是一个抽象工厂类,而不像简单工厂模式, 把核心放在一个实类上。工厂方法模式可以允许很多实的工厂类从抽象工厂类继承下来, 从而可以在实际上成为多个简单工厂模式的综合,从而推广了简单工厂模式。 反过来讲,简单工厂模式是由工厂方法模式退化而来。设想如果我们非常确定一个系统只需要一个实的工厂类, 那么就不妨把抽象工厂类合并到实的工厂类中去。而这样一来,我们就退化到简单工厂模式了。 抽象工厂模式是所有形态的工厂模式中最为抽象和最具广泛性的一种形态,抽象工厂模式是工厂方法模式的进一步扩广化和抽象化。如下图:

在抽象工厂模式中,抽象产品(AbstractProduct) 可能是一个或多个,从而构成一个或多个产品族(Product Family)。在只有一个产品族的情况下,抽象工厂模式实际上退化到工厂方法模式。 总结:简单工厂模式是由一个具体的类去创建其他类的实例,父类是相同的,父类是具体的。 工厂方法模式是有一个抽象的父类定义公共接口,子类负责生成具体的对象,这样做的目的是将类的实例化操作延迟到子类中完成。 抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,而无须指定他们具体的类。它针对的是有多个产品的等级结构。而工厂方法模式针对的是一个产品的等级结构。

(工厂管理)J设计模式之工厂模式(F)

Java设计模式之工厂模式(Factory) 时间:2009-08-04 17:23 来源:未知作者:和水柔石 CSDN IE QQ百度我挖Google POCO Yahoo新浪365Key天极和讯博拉Live奇客鲜果收客饭否叽歪挖客 核心提示:作者:和水柔石一、引子话说十年前,有一个爆发户,他家有三辆汽车(Benz (奔驰)、Bmw (宝马)、Audi (奥迪)看来这人比较爱国,没有日本车),还雇了司机为他开车。不过,爆发户坐车时总是这样:上Benz 车后跟司机说开奔驰车!,坐上Bmw 后他说开 作者:和水柔石 一、引子 话说十年前,有一个爆发户,他家有三辆汽车(Benz (奔驰)、Bmw (宝马)、Audi (奥迪)看来这人比较爱国,没有日本车),还雇了司机为他开车。不过,爆发户坐车时总是这样:上Benz 车后跟司机说" 开奔驰车!" ,坐上Bmw 后他说" 开宝马车!" ,坐上Audi 后他说" 开奥迪车!" 。你一定说:这人有病!直接说开车不就行了?!而当把这个爆发户的行为放到我们程序语言中来,我们发现C 语言一直是通过这种方式来坐车的!幸运的是,这种有病的现象在OO 语言中可以避免了。下面以Java 语言为基础来引入我们本文的主题:工厂模式!! 二、简介 工厂模式主要是为创建对象提供了接口。工厂模式按照《Java 与模式》中的提法分为三类: 1. 简单工厂模式(Simple Factory) 2. 工厂方法模式(Factory Method) 3. 抽象工厂模式(Abstract Factory) 这三种模式从上到下逐步抽象,并且更具一般性。还有一种分类法,就是将简单工厂模式看为工厂方法模式的一种特例,两个归为一类。下面是使用工厂模式的两种情况: 1. 在编码时不能预见需要创建哪种类的实例。 2. 系统不应依赖于产品类实例如何被创建、组合和表达的细节 三、简单工厂模式 顾名思义,这个模式本身很简单,而且使用在业务较简单的情况下。 它由三种角色组成(关系见下面的类图): 1、工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑。在java 中它往往由一个具体类实现。 2、抽象产品角色:它一般是具体产品继承的父类或者实现的接口。在java 中由接口或者抽象类来实现。 3、具体产品角色:工厂类所创建的对象就是此角色的实例。在java 中由一个具体类实现。

简单工厂模式、工厂方法模式实验

1. 使用简单工厂模式设计一个可以创建不同几何形状(Shape),如圆形(Circle)、矩形(Rectangle)的绘图工具工厂类,每个几何图形均有绘制draw()和擦除erase()两个方法,要求在绘制不支持的几何图形时,抛出一个UnSupportedShapeException。绘制类图并编程模拟实现。 代码实现 Shape.java Circle.java

Rectangle.java ShapeFactory.java UnSupportedShapeException.java Test.java

如果向工厂类传入参数“circle”,则返回一个Circle对象,如果传入参数“rectangle”,则返回一个Rectangle对象。现需要增加一个新的三角形Triangle类,如果传入参数“triangle”,则返回一个Triangle对象,对代码进行修改并注意工厂类的变化。 添加一个Triangle类 Triangle.java ShapeFactory类的代码,违背了开闭原则。 ShapeFactory.java

Assert.java 2. 现需要设计一个程序来读取多种不同类型的图片格式,针对每一种图片格式都设计一个图片读取器(ImageReader),如GIF图片读取器(GifReader)用于读取GIF格式的图片、JPG 图片读取器(JpgReader)用于读取JPG格式的图片,所有的图片读取器都有读取图片的方法readImage()。图片读取器对象通过图片读取器工厂ImageReaderFactory来创建,ImageReaderFactory是一个抽象工厂接口,定义了创建图片读取器的工厂方法createImageReader(),其实现类GifReaderFactory用于创建GIF图片读取器(GifReader)对象,

设计模式之C#简单工厂模式

前言:设计模式是软件开发领域的精髓之一。学好设计模式是目前每一个开发人员的必修课。目前关于设计模式的书很多,其中比较好的有GOF那本的中译本,但并不很适合初学者。还有一本是《JAVA与模式》,比较适合初学者使用,在此强烈推荐。但这本书的不足之处是一些地方讲的过于繁琐,很多地方只须简单说明一下即可,却大费笔墨,使得书籍很厚,看起来费力。而且是用JAVA描述的,这使得一些只懂C#的人无从下手。我是一个.net的拥护者,为了看这本书我特意看了些JAVA的书,感觉JAVA在书籍的多样性方面比 .net好很多,而且不少书籍的质量很高。可能是现在JAVA已经比较成熟的原因吧。为了方便.net的爱好者学习设计模式,在此把我学习《JAVA与模式》这本书的学习笔记发出来,并用C#语言重新描述,希望能对初学者有所帮助。 其实设计模式也并不是什么高深的理论,个人认为并不是象一些人所说的“没写过10万代码就不要谈设计模式”,只要用心学习与实践是完全能够掌握的。 简单工厂模式是类的创建模式,又叫做静态工厂方法模式。就是由一个工厂类根据传入的参量决定创建出哪一种产品类的实例。一般涉及到三种角色(如下图): 工厂类:担任这个角色的是工厂方法模式的核心,含有与应用紧密相关的商业逻辑。工厂类在客户端的直接调用下创建产品对象,它往往由一个具体的类实现。 抽象产品角色:担任这个角色的类是由工厂方法模式所创建的对象的父类,或她们共同拥有的接口。一般由接口或抽象类实现。 具体产品角色:工厂方法模式所创建的任何对 象都是这个角色的实例,由具体类实现。 简单工厂模式优缺点: 模式的核心是工厂类,这个类负责产品的创建,而客户端可以免去产品创建的责任,这实现了责任的分割。但由于工厂类集中了所有产品创建逻辑的,如果不能正常工作的话会对系统造成很大的影响。如果增加新产品必须修改工厂角色的源码。

设计模式简单工厂

简单工厂设计模式 目录 1.1摘要 (2) 2.1关键字 (2) 3.1开发工具 (2) 4.1简单工厂模式动机与定义: (2) 4.1.1模式动机 (2) 4.1.2模式定义 (2) 5.1简单工厂模式结构 (3) 6.1简单工厂模式实例: (4) 6.1.1代码分析 (4) 6.1.1.1Product(Shape抽象类)代码: (4) 6.1.1.2ConcreteProduct(Juxing,YuanXing,SanJiao具体产品类)代码:5 JuXing类: (5) YuanXing类: (6) SanJiao类: (6) 6.1.1.3Factory(Factory类)代码: (7) 6.1.1.4 (main类): (7) 6.1.1.5运行结果: (10) 7.1结论 (10) 8.1参考文献: (10)

1.1摘要 本文从面向对象的角度对java接口的概念、作用以及使用它的好处做分析,讲解面向接口编程的方法,结合初步接触软件开发的人员习惯,从简单工厂设计模式的概念和其结构以及用途进行解析,重点讲解简单工厂设计模式在软件开发过程中的作用和好处,通过一些实例来说明简单工厂设计模式的特点。 2.1关键字 面向对象;java接口;接口编程;简单工厂设计模式。 3.1开发工具 Eclipse java语言开发 4.1简单工厂模式动机与定义: 在实际的软件开发过程中有时需要创建一些来自于相同父类的类的实例,为此可以专门定义一个类来负责创建这些类的实例,这些被创建的实例具有共同的父类。在这种情况下,可以通过传入不同的参数从而获取不同的对象,理由Java语言的特征,习惯上将创建其他类实例的方法定义为static方法,外部不需要实例化这个类就可以直接调用该方法来获得需要的对象,该方法也成为静态工厂方法。 4.1.1模式动机 考虑一个简单的软件应用场景,一个软件系统可以提供多个外观不同的按钮(如圆形按钮,矩形按钮等),这些按钮都源自同一个基类,不过在继承基类之后不同的子类修改了部分属性从而使得它们可以呈现不同的外观,如果我们希望在使用这些按钮时,不需要知道这些具体按钮类的名字,只需要知道表示该按钮的一个参数,并提供一个调用方便的方法,把该参数传入方法即可返回一个相应的按钮对象,此时,就可以使用简单工厂模式。 4.1.2模式定义 简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常具有共同的父类。

简单工厂模式实验说明书

工厂设计模式实验说明书 一、实验目的 (1)熟悉简单工厂模式、工厂模式的提出动机,了解类结构及定义。 (2)熟悉简单工厂模式、工厂模式的的优缺点、适用场合。 (3)学习如何使用简单工厂模式和工厂模式。 二、实验内容及步骤 (1)首先熟悉根据理论课学习的简单工厂模式、工厂模式的内容 (2)上机熟悉程序代码,以加深对这两种设计模式的理解。 (3)然后,根据设定的实验问题,分别以简单工厂模式和工厂模式加以实现,完成相应代码编写,并画出相应的类结构图。 三、实验任务 (1)对设定问题分别编写简单工厂模式、工厂模式的实现代码,以及类结构图; (2)完成实验报告并提交。 四、实验报告的书写方法及书写内容 (1)实验目的 熟悉简单工厂设计模式、工厂设计模式的原理、模式提出的动机、实现方式、优缺点及适 用场合。 (2)实验内容 1. 以简单工厂设计模式实现设定问题求解。 2. 以工厂设计模式实现设定问题求解。 3. 通过实现代码的运行加深对简单工厂模式和工厂模式的理解 (3)完成的工作 1. 程序代码 2. 类结构图 3. 实验报告 (4)总结 1. 简工厂设计模式的优缺点:xxxx 2. 工厂设计模式的优缺点:xxxx 3. 总结,意见、建议、体会等:xxxx *实验设定问题: 在某OA系统中,系统根据对比用户在登录时输入的账号和密码以及在数据库中存储的账号和密码是否一致来进行身份验证,如果验证通过,则取出存储在数据库中的用户权限等级(以整数形式存储),根据不同的权限等级创建不同等级的用户对象,不同等级的用户对象拥有不同的操作权限。现使用简单工厂模式来设计该权限管理模块。其类结构如图去所示,请完成其简单的代码程序。 Administrator +diffOperation () ...: void UserFactory +getUser (int permission) ... : User Employee +diffOperation () ... : void Manager +diffOperation () ...: void User + +sameOperation () diffOperation () ... : void : void

设计模式试卷

设计模式期中考试试题 一:单项选择(共20道,每道2分) 1、设计模式一般用来解决什么样的问题( ) A.同一问题的不同表相B不同问题的同一表相 C.不同问题的不同表相 D.以上都不是 2、下列属于面向对象基本原则的是( ) A.继承 B.封装 C.里氏代换D都不是 3、Open-Close原则的含义是一个软件实体( ) A.应当对扩展开放,对修改关闭. B.应当对修改开放,对扩展关闭 C.应当对继承开放,对修改关闭 D.以上都不对 4、当我们想创建一个具体的对象而又不希望指定具体的类时,可以使用()模式。 A.创建型 B.结构型C行为型D.以上都可以 5、要依赖于抽象,不要依赖于具体。即针对接口编程,不要针对实现编程,是( )的表述 A.开-闭原则 B.接口隔离原则 C.里氏代换原则 D.依赖倒转原则 6、设计模式的两大主题是( ) A.系统的维护与开发 B 对象组合与类的继承 C.系统架构与系统开发 D.系统复用与系统扩展 7、“不要和陌生人说话” 是( )原则的通俗表述 A.接口隔离 B.里氏代换 C.依赖倒转 D.迪米特:一个对象应对其他对象尽可能少的了解 8、构造者的的退化模式是通过合并()角色完成退化的。 A.抽象产品B产品C创建者D使用者 9、以下关于简单工厂模式叙述错误的是() A 它属于GoF23种设计模式 B 它是最简单的设计模式之一 C 它是学习其他创建型模式的基础 D 它只需要记住一个简单的参数即可获得所需对象的实例 E 它类中的方法通常为静态方法 F 它返回的类都有一个公共的父类和公共的方法 10、对象适配器模式是()原则的典型应用。 A.合成聚合复用原则 B.里式代换原则 C.依赖倒转原则 D.迪米特法则 D.以上表述全部错误。 11.对于依赖倒转的表述错误的是() A.依赖于抽象而不依赖于具体,也就是针对接口编程。 B.依赖倒转的接口并非语法意义上的接口,而是,一个类对其他对象进行调用时,所知道的方法集合。 C.从选项B的角度论述,一个对象可以有多个接口。 D.实现了同一接口的对象,可以在运行期间,顺利地进行替换。而且不必知道所示用的对象是那个实现类的实例。 E.此题没有正确答案。 12. 现有5个产品族,分布于3各不同的产品等级结构,只要指明一个产品所处的产品族以及它所在的等级结构,就可以唯一地确认这个产品。那么使用抽象工厂方法模式只需要提供

C#设计模式 之 工厂方法模式

工厂方法模式(Factory Method) 耦合关系: 动机(Motivation): 在软件系统中,由于需求的变化,"这个对象的具体实现"经常面临着剧烈的变化,但它却有比较稳定的接口。 如何应对这种变化呢?提供一种封装机制来隔离出"这个易变对象"的变化,从而保持系统中"其它依赖的对象"不随需求的变化而变化。 意图(Intent): 定义一个用户创建对象的接口,让子类决定实例哪一个类。Factory Method使一个类的实例化延迟到子类。 ----------《设计模式》GOF 结构图(Struct):

生活实例: 适用性: 1.当一个类不知道它所必须创建的对象类的时候。 2.当一个类希望由它子类来指定它所创建对象的时候。 3.当类将创建对象的职责委托给多个帮助子类中的某个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。 实例代码: CarFactory类: 1public abstract class CarFactory 2{ 3public abstract Car CarCreate(); 4} Car类: 1public abstract class Car 2{ 3public abstract void StartUp(); 4public abstract void Run(); 5public abstract void Stop(); 6 7} HongQiCarFactory类:

1public class HongQiCarFactory:CarFactory 2{ 3public override Car CarCreate() 4{ 5return new HongQiCar(); 6} 7} BMWCarFactory类: 1public class BMWCarFactory:CarFactory 2{ 3public override Car CarCreate() 4{ 5return new BMWCar(); 6} 7} HongQiCar类: 1public class HongQiCar:Car 2{ 3public override void StartUp() 4{ 5Console.WriteLine("Test HongQiCar start-up speed!"); 6} 7public override void Run() 8{ 9Console.WriteLine("The HongQiCar run is very quickly!"); 10} 11public override void Stop() 12{ 13Console.WriteLine("The slow stop time is3second"); 14} 15} BMWCar类: 1public class BMWCar:Car 2{

工厂模式的三种类型

工厂模式的三种类型: 1抽象工厂模式是所有形态的工厂模式中最为抽 象和最其一般性的。抽象工厂模式可以向客户端 提供一个接口,使得客户端在不必指定产品的具 体类型的情况下,能够创建多个产品族的产品对 象。 1.抽象工厂(Creator)角色 抽象工厂模式的核心,包含对多个产品结构的声明,任何工厂类都必须实现这个接口。 2.具体工厂(Concrete Creator)角色 具体工厂类是抽象工厂的一个实现,负责实例化某个产品族中的产品对象。 3.抽象(Product)角色 抽象模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。 4.具体产品(Concrete Product)角色 抽象模式所创建的具体实例对象 总结:抽象工厂中方法对应产品结构,具体工厂对应产品族。 2工厂方法模式同样属于类的创建型模式又被称 为多态工厂模式。工厂方法模式的意义是定义一个创建 产品对象的工厂接口,将实际创建工作推迟到子类当中。 核心工厂类不再负责产品的创建,这样核心类成为一个 抽象工厂角色,仅负责具体工厂子类必须实现的接口, 这样进一步抽象化的好处是使得工厂方法模式可以使系 统在不修改具体工厂角色的情况下引进新的产品。

1.抽象工厂(Creator)角色 工厂方法模式的核心,任何工厂类都必须实现这个接口。 2.具体工厂(Concrete Creator)角色 具体工厂类是抽象工厂的一个实现,负责实例化产品对象。 3.抽象(Product)角色 工厂方法模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。 4.具体产品(Concrete Product)角色 工厂方法模式所创建的具体实例对象 工厂方法模式与简单工厂模式在结构上的不同不是很明显。工厂方 法类的核心是一个抽象工厂类,而简单工厂模式把核心放在一个具 体类上。 工厂方法模式之所以有一个别名叫多态性工厂模式是因为具体工 厂类都有共同的接口,或者有共同的抽象父类。 当系统扩展需要添加新的产品对象时,仅仅需要添加一个具体对 象以及一个具体工厂对象,原有工厂对象不需要进行任何修改,也 不需要修改客户端,很好的符合了“开放-封闭”原则。而简单工厂 模式在添加新产品对象后不得不修改工厂方法,扩展性不好。 工厂方法模式退化后可以演变成简单工厂模式。 3简单工厂模式属于类的创建型模式,又叫做静态 工厂方法模式。通过专门定义一个类来负责创建 其他类的实例,被创建的实例通常都具有共同的 父类。 1.工厂(Creator)角色 简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类可以被外界直接调用,创建所需的产品对象。 2.抽象(Product)角色 简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。 3.具体产品(Concrete Product)角色

java常用设计模式-工厂模式的实现

?工厂模式细分有三种,分别为:简单工厂模式、工厂方法模式和抽象工厂模式。 (现单个的讲,最后再讲这三个的区别) ?这篇文章主要通过一个农场的实例来讲解,这也是java与模式书中的例子,只不过我对一些部分进行了简化,一些部分进行了扩充,以帮助理解例子如下: 有一个农场公司,专门向市场销售各类水果有如下水果: 葡萄(grape) 草莓(strawberry) 苹果(apple) /*-------------------------------1、简单工厂模式-----------------------------------------------*/ 这个比较简单,写一下源代码源代码中给出了必须的注释代码比书上的要 简单一些,排版也好看一些,只是为了让新手更好的理解 Fruit.java: /** *水果与其它植物相比有一些专门的属性,以便与农场的 * 其它植物区分开这里的水果假设它必须具备的方法: * 生长grow()收获harvest()种植plant() */ public interface Fruit { void grow(); void harvest(); ?voidplant(); } /*****************************下面是Apple类的函数Apple.java:*******************/ /** *苹果是水果类的一种,因此它必须实现水果接口的所有方法即 *grow()harvest()plant()三个函数另外,由于苹果是多年生植物, *所以多出一个treeAge性质,描述苹果的树龄 */ public class Apple implements Fruit { privateint treeAge; publicvoid grow(){ //苹果的生长函数代码} ?public void harvest(){//苹果的收获函数代码} ?public void plant() { //苹果的种植函数代码}

简单工厂模式之JAVA代码

JAVA 设计模式-------简单工厂模式 /* 简单工厂模式Java代码 有点通过创建一个工厂类,来集中创建个各实例,增加了代码的扩展性*/ //抽象的运算类 import java.util.Scanner; abstract class Operate { private double numberA; private double numberB; public void setNumberA(double numberA) { this.numberA=numberA; } public double getNumberA() { return numberA; } public void setNumberB(double numberB) { this.numberB=numberB; } public double getNumberB() { return numberB; } //抽象方法 abstract public double getResult(); } //加法类 class Add extends Operate { //覆写父类的抽象方法 public double getResult() { double result=0; result=getNumberA()+getNumberB(); return result; } } //减法类

class Sub extends Operate { //覆写父类的抽象方法 public double getResult() { double result=0; result=getNumberA()-getNumberB(); return result; } } //乘法类 class Mul extends Operate { //覆写父类的抽象方法 public double getResult() { double result=0; result=getNumberA()*getNumberB(); return result; } } //除法类 class Chu extends Operate { //覆写父类的抽象方法 public double getResult() { double result=0; result=getNumberA()/getNumberB(); return result; } } //工厂类 class Factory { public static Operate oper=null; public static Operate createoperate(int sign) { switch(sign) { case 1: oper=new Add();

设计模式(简单工厂,工厂方法,抽象工厂)区别

第一种表述 简单工厂,工厂方法,抽象工厂都属于设计模式中的创建型模式。其主要功能都是帮助我们把对象的实例化部分抽取了出来,优化了系统的架构,并且增强了系统的扩展性。 本文是本人对这三种模式学习后的一个小结以及对他们之间的区别的理解。 简单工厂 简单工厂模式的工厂类一般是使用静态方法,通过接收的参数的不同来返回不同的对象实例。 不修改代码的话,是无法扩展的。 工厂方法 工厂方法是针对每一种产品提供一个工厂类。通过不同的工厂实例来创建不同的产品实例。 在同一等级结构中,支持增加任意产品。

抽象工厂 抽象工厂是应对产品族概念的。比如说,每个汽车公司可能要同时生产轿车,货车,客车,那么每一个工厂都要有创建轿车,货车和客车的方法。

应对产品族概念而生,增加新的产品线很容易,但是无法增加新的产品。 小结 ★工厂模式中,重要的是工厂类,而不是产品类。产品类可以是多种形式,多层继承或者是单个类都是可以的。但要明确的,工厂模式的接口只会返回一种类型的实例,这是在设计产品类的时候需要注意的,最好是有父类或者共同实现的接口。 ★使用工厂模式,返回的实例一定是工厂创建的,而不是从其他对象中获取的。

★工厂模式返回的实例可以不是新创建的,返回由工厂创建好的实例也是可以的。 区别 简单工厂:用来生产同一等级结构中的任意产品。(对于增加新的产品,无能为力)工厂模式:用来生产同一等级结构中的固定产品。(支持增加任意产品) 抽象工厂:用来生产不同产品族的全部产品。(对于增加新的产品,无能为力;支持增加产品族)以上三种工厂方法在等级结构和产品族这两个方向上的支持程度不同。所以要根据情况考虑应该使用哪种方法。 第二种表述 简单工厂、工厂方法和抽象工厂都是创建型的设计模式。 三者的共同点是: 1、都有两种作用不同的类:产品类和工厂类。其中,工厂类在自己的方法中实例化产品类(即使用new命令生成产品类的对象),并将生成的产品类的对象提供给外部使用。 2、创建的过程,都是类似的:工厂类得到一个标志(可以由程序输入,也可以读取配置文件中的内容),返回一个产品对象。 三者的不同点: 1、简单工厂 简单工厂方法中,包括一个“抽象产品类”(该类可以是接口Interface,也可以是实际的类Class),所有需要的产品类都是该“抽象产品类”的子类(如果是接口的话,那么就是说所有产品类都继承了该接口)。 简单工厂一般只包含一个具体的工厂类,由该工厂类生成所有的产品类的对象。生成产品类的方法,其内部一般是类似于switch的结构,根据输入的标志,选择创建不同类型的对象。由于不知道创建的对象到底是哪个类的,所以方法的返回值的类型是“抽象产品类”。 2、工厂方法

Java开发设计模式

0、简单工厂模式 简单工厂模式模式分为三种: 01、普通 就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。首先看下关系图: 举例如下:(我们举一个发送邮件和短信的例子) 首先,创建二者的共同接口: [java]view plaincopy 1.public interface Sender { 2.public void Send(); 3.} 其次,创建实现类: [java]view plaincopy 1.public class MailSender implements Sender { 2.@Override 3.public void Send() { 4. System.out.println("this is mailsender!"); 5. } 6.} [java]view plaincopy 1.public class SmsSender implements Sender { 2. 3.@Override 4.public void Send() { 5. System.out.println("this is sms sender!");

6. } 7.} 最后,建工厂类: [java]view plaincopy 1.public class SendFactory { 2. 3.public Sender produce(String type) { 4.if ("mail".equals(type)) { 5.return new MailSender(); 6. } else if ("sms".equals(type)) { 7.return new SmsSender(); 8. } else { 9. System.out.println("请输入正确的类型!"); 10.return null; 11. } 12. } 13.} 我们来测试下: 1.public class FactoryTest { 2. 3.public static void main(String[] args) { 4. SendFactory factory = new SendFactory(); 5. Sender sender = factory.produce("sms"); 6. sender.Send(); 7. } 8.} 输出:this is sms sender! 02、多个方法 是对普通工厂方法模式的改进,在普通工厂方法模式中,如果传递的字符串出错,则不能正确创建对象,而多个工厂方法模式是提供多个工厂方法,分别创建对象。关系图:

简单工厂模式,工厂方法模式和抽象工厂模式的异同

简单工厂模式,工厂方法模式和抽象工厂模式的异同 简单工厂模式,工厂方法模式和抽象工厂模式都是属于创建型设计模式,这三种创建型模式都不需要知道具体类。我们掌握一种思想,就是在创建一个对象时,需要把容易发生变化的地方给封装起来,来控制变化(哪里变化,封装哪里),以适应客户的变动,项目的扩展。用这三种设计模式都可以实现,那究竟这三种设计模式有什么异同呢?下面根据这三者之间的特点,优点,缺点,适用范围进行比较。 一.特点 简单工厂模式:专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有 共同的父类。它又称为静态工厂方法模式。它的实质是由一个工厂 类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类 继承自一个父类或接口)的实例。简单工厂模式的创建目标,所有 创建的对象都是充当这个角色的某个具体类的实例。在这个模式中, 工厂类是整个模式的关键所在。它包含必要的判断逻辑,能够根据 外界给定的信息,决定究竟应该创建哪个具体类的对象。用户在使 用时可以直接根据工厂类去创建所需的实例,而无需了解这些对象 是如何创建以及如何组织的。有利于整个软件体系结构的优化。 工厂方法模式:工厂方法是粒度很小的设计模式,因为模式的表现只是一个抽象的方法。 提前定义用于创建对象的接口,让子类决定实例化具体的某一个类,即 在工厂和产品中间增加接口,工厂不再负责产品的创建,由接口针对不 同条件返回具体的类实例,由具体类实例去实现。工厂方法模式是简单 工厂模式的衍生,解决了许多简单工厂模式的问题。首先完全实现‘开 -闭原则’,实现了可扩展。其次实现更复杂的层次结构,可以应用于 产品结果复杂的场合。工厂方法模式是对简单工厂模式进行了抽象。有 一个抽象的Factory类(可以是抽象类和接口),这个类将不在负责具 体的产品生产,而是只制定一些规范,具体的生产工作由其子类去完成。 在这个模式中,工厂类和产品类往往可以依次对应。即一个抽象工厂对 应一个抽象产品,一个具体工厂对应一个具体产品,这个具体的工厂就 负责生产对应的产品。

架构分析与设计模式

架构分析与设计模 式

摘要:一个设计模式是针对某一类问题的最佳解决方案,而且已经成功应用于许多系统的设计中,它解决了在某种特定情境中重复发生的某个问题,因此设计模式能够被定义为:设计模式是从许多优秀的软件系统中总结出成功的可复用的设计方案。 1.关键字:工厂方法模式、简单的程序实现、架构分析、设计模 式 工厂方法模式 2.工厂方法模式的介绍 工厂方法(Factory Method)模式的意义是定义一个创立产品对象的工厂接口,将实际创立工作推迟到子类当中。核心工厂类不再负责产品的创立,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式能够使系统在不修改具体工厂角色的情况下引进新的产品。 1.1工厂方法模式角色与结构 抽象工厂(Creator)角色:是工厂方法模式的核心,与应用程序无关。任何在模式中创立的对象的工厂类必须实现这个接口。 具体工厂(Concrete Creator)角色:这是实现抽象工厂接口的具体工厂类,包含与应用程序密切相关的逻辑,而且受到应用程序调用以创立产品对象。

抽象产品(Product)角色:工厂方法模式所创立的对象的超类型,也就是产品对象的共同父类或共同拥有的接口。在上图中,这个角色是Light。 具体产品(Concrete Product)角色:这个角色实现了抽象产品角色所定义的接口。某具体产品有专门的具体工厂创立,它们之间往往一一对应。 1.2工厂方法模式的应用 工厂方法经常见在以下两种情况中: 第一种情况是对于某个产品,调用者清楚地知道应该使用哪个具体工厂服务,实例化该具体工厂,生产出具体的产品来。Java Collection中的iterator() 方法即属于这种情况。 第二种情况,只是需要一种产品,而不想知道也不需要知道究竟是哪个工厂为生产的,即最终选用哪个具体工厂的决定权在生产者一方,它们根据当前系统的情况来实例化一个具体的工厂返回给使用者,而这个决策过程这对于使用者来说是透明的。 1.3工厂方法模式的适用环境 在以下情况下能够使用工厂方法模式: (1)一个类不知道它所需要的对象的类:在工厂方法模式中,客户端不需要知

工厂模式讲解

https://www.360docs.net/doc/af4698460.html, 工厂模式讲解 工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。这也是对象与过程分离的技术提现了oo思想 一般我们将工厂模式分为一下三种: 1)简单工厂模式(Simple Factory) 2)工厂方法模式(Factory Method) 3)抽象工厂模式(Abstract Factory) 简单工厂模式:简单工厂模式又称静态工厂方法模式。它存在的目的很简单:定义一个用于创建对象的接口。 它的组成: 工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑。 抽象产品角色:它一般是具体产品继承的父类或者实现的接口,要实现什么功能。 具体产品角色:工厂类所创建的对象就是此角色的实例,具体类的实现,是提现产品的实际功能。 下面讲一个实例,相信很多人已经看过: 话说十年前,有一个暴发户,他家有三辆汽车——Benz奔驰、Bmw宝马、Audi奥迪,还雇了司机为他开车。不过,暴发户坐车时总是怪怪的:上Benz车后跟司机说“开奔驰车!”,坐上Bmw后他说“开宝马车!”,坐上Audi说“开奥迪车!”。你一定说:这人有病!直接说开车不就行了?! 而当把这个暴发户的行为放到我们程序设计中来时,会发现这是一个普遍存在的现象。幸运的是,这种有病的现象在OO(面向对象)语言中可以避免了。下面就以C#语言为基础来引入我们本文的主题:工厂模式的工厂方法。 //抽象产品角色 public interface Car { string drive(); } //具体产品角色,具体类的实现 public class BenzCar : Car { public string drive() { return "Driving Benz"; } } public class BmwCar : Car { public string drive()

常见的10种设计模式.docx

设计模式 1简单工厂模式 简单工厂模式属于类的创建型模式,又叫做静态工厂方法模式。通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。 工厂(Creator)角色 简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类可以被外界直接调用,创建所需的产品对象。 抽象(Product)角色 简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。 具体产品(Concrete Product)角色 简单工厂模式所创建的具体实例对象 优缺点 在这个模式中,工厂类是整个模式的关键所在。它包含必要的判断逻辑,能够根据外界给定的信息,决定究竟应该创建哪个具体类的对象。用户在使用时可以直接根据工厂类去创建所需的实例,而无需了解这些对象是如何创建以及如何组织的。有利于整个软件体系结构的优化。 简单工厂模式的缺点也正体现在其工厂类上,由于工厂类集中了所有实例的创建逻辑,所以“高内聚”方面做的并不好。另外,当系统中的具体产品类不断增多时,可能会出现要求工厂类也要做相应的修改,扩展性并不很好。

工厂方法模式同样属于类的创建型模式又被称为多态工厂模式。工厂方法模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。 抽象工厂(Creator)角色:工厂方法模式的核心,任何工厂类都必须实现这个接口。 具体工厂(Concrete Creator)角色:抽象工厂的一个实现,负责实例化产品对象。 抽象(Product)角色:工厂方法模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。 具体产品(Concrete Product)角色:工厂方法模式所创建的具体实例对象 工厂方法模式与工厂模式的比较: 工厂方法模式与简单工厂模式在结构上的不同不是很明显。工厂方法类的核心是一个抽象工厂类,而简单工厂模式把核心放在一个具体类上。 工厂方法模式之所以有一个别名叫多态性工厂模式是因为具体工厂类都有共同的接口,或者有共同的抽象父类。 当系统扩展需要添加新的产品对象时,仅仅需要添加一个具体对象以及一个具体工厂对象,原有工厂对象不需要进行任何修改,也不需要修改客户端,很好的符合了“开放-封闭”原则。而简单工厂模式在添加新产品对象后不得不修改工厂方法,扩展性不好。 工厂方法模式退化后可以演变成简单工厂模式。

相关文档
最新文档