当前位置:文档之家› 工厂方法模式设计模式浅谈

工厂方法模式设计模式浅谈

工厂方法模式设计模式浅谈
工厂方法模式设计模式浅谈

工厂方法模式设计模式浅谈

工厂方法经常用在以下两种情况中:

第一种情况是对于某个产品,调用者清楚地知道应该使用哪个具体工厂服务,实例化该具体工厂,生产出具体的产品来。Java Collection中的iterator() 方法即属于这种情况。

第二种情况,只是需要一种产品,而不想知道也不需要知道究竟是哪个工厂为生产的,即最终选用哪个具体工厂的决定权在生产者一方,它们根据当前系统的情况来实例化一个具体的工厂返回给使用者,而这个决策过程这对于使用者来说是透明的。

工厂模式的定义

工厂方法模式(Factory Method)的意义就是是定义一个用来创建产品对象工厂的接口,然后将所要完成的工作交给子类运行。使得核心工厂类不再对产品进行创建,这样核心类就成为了一个类似抽象工厂的角色,只提供子类所要创建的对象的借口,这样做的目的是使得工厂方法模式可以使系统在不改变工厂角色的情况下引进其他新的产品。

工厂方法模式其实是简单工厂模式的衍生,完善了许多简单工厂模式的缺点,解决了许多简单工厂模式的问题。

工厂方法模式的对简单工厂模式进行了抽象。有一个抽象的工厂类或者接口,这个类将不再负责详细的产品生产,详细的生产工作由工厂的子类去完成实现。在样的模式中,工厂类和产品类一般可以相对应。就是一个抽象工厂对应一个抽象的产品,一个具体工厂对应一个具体产品。

工厂方法模式是最典型的模板方法模式应用。

工厂方法模式角色与结构

抽象工厂(Creator)角色:是工厂方法模式的核心,与应用程序无关。任何在模式中创建的对象的工厂类必须实现这个接口。

具体工厂(Concrete Creator)角色:这是实现抽象工厂接口的具体工厂类,包含与应用程序密切相关的逻辑,并且受到应用程序调用以创建产品对象。在上图中有两个这样的角色:BulbCreator与TubeCreator。

抽象产品(Product)角色:工厂方法模式所创建的对象的超类型,也就是产品对象的共同父类或共同拥有的接口。在上图中,这个角色是Light。

具体产品(Concrete Product)角色:这个角色实现了抽象产品角色所定义的接口。某具体产品有专门的具体工厂创建,它们之间往往一一对应。

优点

有(1)用户只需要关心所需产品对应的工厂,无需关心创建细节,甚至无需知道具体产品类的类名。

它能够使工厂方可以自主确定创建何种产品对象,而如何创建这个对象的细节则完美封装在具体共产内部。

工厂方法模式可以使系统在不改变工厂角色的情况下引进其他新的产品。

缺点

添加新产品是,需要编写新的具体产品类,还要提供与之对应的具体工厂类,系统中类的个数将成对增加,会给系统带来额外的开销。

对工厂方法模式与简单工厂模式对比

工厂方法模式和简单工厂模式在结构上的不同是很明显的。工厂方法模式的核心是一个抽象工厂类,而简单工厂模式把核心放在一个具体类上工厂方法模式可以允许很多具体工厂类从抽象工厂类中将创建行为继承下来,从而可以成为多个简单工厂模式的综合,进而推广了简

单工厂模式。工厂方法模式退化后可以变得很像简单工厂模式。

实例介绍

宝马工厂生产宝马汽车,奔驰工厂生产奔驰汽车使用工厂,使用工厂模式模拟场景,绘制相应类图用java实现。

工厂方法模式的一优点在于增加新的产品类无需修改现有系统,所以先创建抽象产品类autocar,在对抽象产品类进行实例化,即具体产品类BMWautocar和具体产品类Benzautocar;在创建抽象工厂类autocarFactory,在对抽象工厂类进行实例化,即具体工厂类BMWautocarFactory和具体工厂类BenzautocarFactory。

建创建对象的任务委托给多个工厂子类的某一个,客户端在使用是可以无需关心是哪一个工厂创建的产品子类

实例代码及解释

抽象产品类汽车autocar;

autocar作为抽象产品类,它可以是一个接口,也可以是一个抽象类,其中包含了所有产品都具有的业务方法yunxing()行驶;

(2)具体产品类BMWautocar(宝马汽车类)

BMWautocar是抽象产品autocar的接口子类,它是一种具体产品,实现了在autocar接口中定义的业务方法yunxing()行驶;

具体产品类Benzautocar(奔驰汽车类)

Benz autocar是抽象产品autocar的另一个接口子类,与上一个相似。

抽象工厂类autocarFactory(汽车工厂类)

autocarFactory是抽象工厂类,它可以是一个接口,也可以是一个抽象类,它包含了抽象的工厂方法product autocar,返回一个抽象产品autocar类型的对象。

具体工厂类BMW autocarFactory(宝马汽车工厂类)

BMW autocarFactory是具体工厂类,它是抽象工厂类autocarFactory的子类,实现了抽象工厂方法product autocar();在工厂方法中创建并返回一个对象的具体产品。

(6)

具体工厂类Benz autocarFactory(奔驰汽车工厂类)

辅助代码

总结与思考

工厂方法模式扩展

使用多个工厂方法

在抽象工厂角色中定义多个方法,让具体工厂角色实现这些不同的工厂方法。

产品对象的重复使用

调用产品类的构造函数创建一个新的产品实例,然后将这个实例提供给客户端

多态性的丧失和模式的退化

一个工厂模式方法的实现依赖于工厂角色和产品的多态性。

软件设计模式复习

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

三种工厂模式区别

工厂方法模式: 一个抽象产品类,可以派生出多个具体产品类。 一个抽象工厂类,可以派生出多个具体工厂类。 每个具体工厂类只能创建一个具体产品类的实例。 抽象工厂模式: 多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。 一个抽象工厂类,可以派生出多个具体工厂类。 每个具体工厂类可以创建多个具体产品类的实例。 区别: 工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。 工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。 看了网络上很多关于设计模式的方法,有的模式看起来相似,但本质还是区别很大的.像简单工厂,工厂方法和抽象工厂就有很明显的区别. 有一个比较好理解的例子,在这跟大家介绍下: 1.如果一个后花园只种蔬菜类,那么就用简单工厂就可以了. 2.如果后花园蔬菜品种繁多.得用工厂方法才可以,把共有的东西抽象出来. 3.如果要扩大后花园的规模,比如一个在北方,一个在南方,这样工厂方法就无法实现了,就应当用抽象工厂,把各种各样的植物,又组成一个后花园. 所以我个人认为,简单工厂是一个工厂只生产一类的产品,面对的是具体的类,工厂方法是可以生产不同的产品,把公共的方法抽象出来,然后进行创建各种各样的产品.抽象工厂把几种产品划出共同的东西,把相互依赖的对象抽象出来,只要实现这些接口就可以得到不同的产品. 具体例子: 1.简单工厂: using System; public interface ICar { void run(); } public class BMWCar : ICar { public void run() { Console.WriteLine("BMWCar run"); } }

(工厂管理)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 中由一个具体类实现。

工厂模式有以下几种形态

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

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

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

设计模式简单工厂

简单工厂设计模式 目录 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. 使用简单工厂模式设计一个可以创建不同几何形状(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)对象,

设计模式试卷

设计模式期中考试试题 一:单项选择(共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各不同的产品等级结构,只要指明一个产品所处的产品族以及它所在的等级结构,就可以唯一地确认这个产品。那么使用抽象工厂方法模式只需要提供

简单工厂模式实验说明书

工厂设计模式实验说明书 一、实验目的 (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

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{

工厂方法设计模式

实验三工厂方法设计模式 实验目的:加深对工厂方法设计模式及创建型设计模式原理的理解 实验环境:C#.Net 实验内容: 某系统日志记录器要求支持多种日志记录方式,如文件日志记录和到数据库日志记录等,且用户在应用场景下可以根据要求动态选择日志记录方式,现使用工厂方法设计模式设计该系统。 实验过程: 1、构建实现场景,画出UML类图 2、实现代码(C#) static void Main(string [] args) { Console .WriteLine("采用文件日志记录方式"); ILogFactory fileLogFactory = new FileLogFactory(); Log filelog = fileLogFactory .CreateLog();

filelog .write(); Console .WriteLine("=============================="); Console .WriteLine("采用数据库日志记录方式"); ILogFactory databaseLogFactory = new DatabaseLogFactory(); Log databaseLog = databaseLogFactory .CreateLog(); databaseLog .write(); } ///

///日志抽象类 /// public abstract class Log { public abstract void write(); } /// ///文件日志类 ///

工厂模式的三种类型

工厂模式的三种类型: 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)角色

常见几种显示器进入工厂模式的方法

常见几种显示器进入工厂模式的方法 2007-11-17 00:05:标签:pc知识 常见几种显示器进入工厂模式的方法 ⒈方正显示器 ⑴方正15英寸和17英寸飞梭显示器:开机前按住飞梭键后再开机即可进入工厂模式。 ⑵方正OSD显示器:开机前按住最中间那个按键后再开机就可以进入工厂模式。 ⑶方正15英寸数控显示器:先按住“RESE”键后再开机,直到调整指示灯闪烁为止,即表示已经进入工厂模式。 ⑷方正FG796—NS显示器:显示器关机后,同时按住“UP”键和“DOWN”键,再按下电源开关开机,直到指示灯闪烁,即进入工厂模式。 说明:方正显示器有的机型在“工厂模式”中还可以查看显示器的工作时间。此项功能可以帮助用户很方便的检查显示器的实际使用时间,以防止商家把样品机二次装箱后再当成新机卖出。 ⒉ EMC显示器 ⑴ EMC D777显示器:该机进入工厂模式的方法很特殊,关闭显示器电源后,先取下电源插头,按住菜单选择不松手,再插上电源插头,按下电源开关开机,等待屏幕上出现“OSD”菜单时即已经进入工厂调整模式。 ⑵ EMC797显示器:该机进入工厂模式的方法也很特殊。关闭显示器电源后,取下电源插头,按下控制面板最上方的调节键不松手,再插上电源插头,按下电源开关开机,则显示器进入工厂模式。 ⑶ EMC D17英寸纯平显示器:关机后,先同时按住“U”键和“退出”键,再按下电源开关开机,则屏幕的左上角出现工厂模式调节选项。 ⑷EMC570显示器:关机后,按住飞梭键不松手,再按住电源开关开机,这时,如果直接按下飞梭键,屏幕显示的是用户菜单;而旋转飞梭键则进入工厂模式状态下的英文菜单。调试结束后,再按开关机键一次,则退出工厂模式。 ⒊厦华显示器 ⑴厦华1769显示器:关机后,按下电源开关开机,注意不要松手,再按下飞梭键,也保持按住状态,最后松开电源开关,则屏幕出现“FACTORY OSD”工厂模式。 ⑵厦华15 Ⅲ显示器:先按住消磁键,再按下飞梭键,然后放开消磁键,直到屏幕出现“FACTORY OSD”字样,就进入了工厂模式。 ⒋ TCL显示器 ⑴ TCL M506显示器:同时按住“SELECT”键和“+”键开机,则进入工厂设置状态。按下“SELECT”键改变调整选项,按“+”或“-”键进行数据调整,当调整至上、下限时,相应的指示条闪烁。 ⑵TCL M505显示器:先按住任意键后使“OSD”菜单出现,调整“+”键或“-”键,使其选中右上角的“ZOOM”图标,接连按两次“8”号键,注意第二次要按住约4~5秒钟时间,则屏幕出现工厂模式调节选项。 ⑶TCL7XX系列显示器:按“MENU”键呼出“OSD”菜单,按右键移动光标至“ZOOM”位置,连按两次“MENU”键不松手,直至工厂模式的调整菜单出现为止。 ⒌长城显示器 ⑴长城1770DI和长城G702FSJ显示器:在待机状态下同时按住“8”号键和“F”键,然后开机,直到屏幕点亮后松开,再按下“F”键即可进入工厂模式。调节完毕,按“EXIT”键,即可退出工厂模式。 ⑵长城C-1524显示器:在待机状态下按住“SELECT”键,然后开机,直到调整指示灯全亮,则进入工厂模式。 ⒍联想显示器 ⑴联想(冠捷)三键机:同时按住左右两键,再按电源开关开机即可进入工厂模式。 ⑵联想新三键机:在开机状态下,若同时按住左右两键,则进入工厂模式的常规项目调试状态。若同时按住上下两键,则进入亮、暗平衡调整。 ⒎飞利浦显示器 ⑴飞利浦109B2显示器:开机后,同时按住左边“T”键和右边“U”键,15秒后即可进入工厂模式。 ⑵飞利浦105S5显示器:先同时按住左边“-”键和右边“OK”键,再按下电源开关开机,则显示器屏幕上出现工厂模式调节选项。 ⒏ LG显示器 ⑴ LG CB775N显示器:同时按下左键和电源键,几秒钟后屏幕闪烁,再进入“OSD”菜单中选择消磁选项,即可进入工厂模式调节选项。 (2)LG775N显示器:在开机状态下按住左键及“set”键,用“下”键把图标调到最下边一项,即进入工厂模式。再按“右”键,在屏幕右边出现“RDDV、SCON、BCUT、ABL”等选项,用“上”“下”和“左”“右”键就可以进行数值调整。按“set”键即可存储所调节的数据。

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() { //苹果的种植函数代码}

C设计模式工厂型设计示例

名 称 Factory Method 结 构 意 图 定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method 使一个类的实例化延迟到其子类。 适 用 性 ?当一个类不知道它所必须创建的对象的类的时候。 ?当一个类希望由它的子类来指定它所创建的对象的时候。 ?当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。 namespace FactoryMethod_DesignPattern { using System; . . /// public class Client { public static int Main(string[] args) { MyApplication myApplication = new MyApplication(); (); (); return 0;

} } } 一、工厂方法(Factory Method)模式 工厂方法(FactoryMethod)模式是类的创建模式,其用意是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中。 工厂方法模式是简单工厂模式的进一步抽象和推广。由于使用了多态性,工厂方法模式保持了简单工厂模式的优点,而且克服了它的缺点。 在工厂方法模式中,核心的工厂类不再负责所有产品的创建,而是将具体创建工作交给子类去做。这个核心类仅仅负责给出具体工厂必须实现的接口,而不接触哪一个产品类被实例化这种细节。这使得工厂方法模式可以允许系统在不修改工厂角色的情况下引进新产品。 在Factory Method模式中,工厂类与产品类往往具有平行的等级结构,它们之间一一对应。 二、Factory Method模式角色与结构: 抽象工厂(Creator)角色:是工厂方法模式的核心,与应用程序无关。任何在模式中创建的对象的工厂类必须实现这个接口。

(工厂管理)工厂菜单操作方法

工厂菜单操作方法 ■老化模式 1)按“D-mode”直接进入老化模式,屏幕显示“factory”。按“DISP”退出“factory”, 进入白平衡模式。 2)按“MENU”键到调谐菜单。按“CH-”键选定调后频道;按数字键“2 4 8 3”、“6483”、“6568”进入老化模式。 在工厂模式或老化模式下,按“SYS”,“音效模式”,“sleep”可直接调整数据, 屏幕 显示相应的菜单+factory,按“MENU”显示主菜单调整各项数据,所有模拟量以 50为单位步进,搜台速度加倍。若退出数据调试,按“DISP”退出,屏幕只显 “factory”。 ■白平衡模式 3)在老化模式,按“D模式”退出“factory”,进入白平衡模式。 4)按“D模式”键二次(工厂键)进入白平衡模式。 5)在工厂模式,按数字键0进入白平衡模式。 6)在白平衡模式下,按“MUTE”,可出现水平亮线,此时用“1、4”RCUT,用 “2、5”键调BCUT;用“3、6”键调GCUT; ■进入工厂模式 A、用户遥控器: 1)先进老化模式,在老化模式,按“DISP”退出“factory”,进入白平衡模式。 2)在白平衡模式下,按数字键1、2、3、4、5、6、7、DISP进入工厂模式。 B、按“D模式”键三次(工厂键)进入工厂调试菜单。 ■进入工厂模式F8~F15页 在工厂模式前7页,按数字键“2 4 8 3”、“6483”、“6568”进入F8页。同时打开 F8~F15页。按静音键正向翻页菜单,按返回键反向翻页。按数字键1、2、3、4、5、 6、7、8、9进入工厂模式F1~F9页。按数字键0进入白平衡模式。 ■退出工厂模式 1)按“DISP”可退出工厂菜单。 1)按电源开关,可退出工厂状态。但再开机,保留“factory”模式。 ■工厂调试用快捷键说明 进入工厂模式后,遥控器上部分按键的功能将发生变化,以适应生产调试的需要。 1)按静音键正向翻页调试菜单,按返回键反向翻页调试菜单。 2)按遥控器上“CH+”、“CH-”、选择菜单项目,按“VOL+”、“VOL-”改变设定数值。 3)按“SLEEP”显示芯片内部6种测试信号; PAL制: 黑场:看暗平衡。 白场:看亮平衡。 方格:调PAL线性、行场幅。方格的上下左右最边刚刚不见为最好。 十字架:调NTSC制行场中心值。 NTSC制: 十字架:调NTSC制行场中心值。 方格:调PAL线性、行场幅。方格的上下左右最边刚刚不见为最好。

工厂方法模式设计的汽车保险管理应用程序实例

作业正文 作业一: 1、作业题目内容的详细描述。 【作业】例为使用工厂方法模式设计的汽车保险管理应用程序实例,现在需要扩张例的设计图,添加一个名为LuxuryCarInsurance的类,并且需要编写此类和其他需要添加的类的代码,详细要求参见光盘的响应作业部分 2、完成本题目所采用的软件设计模式名称及画出相应的类图,或者是所采用的软件体系结构名称及画出相应的体系结构图。 该题目采用的是工厂方法模式,类图如下:

3、画出完成本题目所设计程序的设计类图;如还有其他图,也一并画出。 4、完成本题目所设计的程序代码。 (1)程序主界面的部分代码如下: (添加汽车保险名) FactoryMethodGUI <> PolicvProducer getPolicyObj() BodyInjurPolicyProducer getPolicyObj() CollisionPolicyProducer getPolicyObj() ComprihensivePolicyProducer getPolicyObj() LuxeryyCarPolicyProducer getPolicyObj() PersonInjuryPolicyProducer getPolicyObj() <> AutoInsurance getInsurDescription() BodyInjurLiablility getInsurDescription() LuxeryCarInsurance getInsurDescription() PersonInjuryProtection getInsurDescription() ComprehensiveCoverage getInsurDescription() CollisionCoverage getInsurDescription()

设计模式实验抽象工厂模式

实验报告课程:设计模式实验学期: 2010-2011学年第一学期任课教师: 专业:学号:姓名:成绩: 实验4 抽象工厂模式 1.题目: 使用抽象工厂模式实现一个DIY电脑店,其中的电脑配置有三个种类:学生版、家庭装、豪华版。 2.模式设计的UML类图:

3.程序源代码: (1)计算机配置工厂接口ComputerConfigurationFactory.java:public interface ComputerConfigurationFactory { public Cpu createCpu(); public Ram createRam(); public Mainboard createMainboard(); public Harddisk createHarddisk(); public Display createDisplay(); } ( { } { } implements ComputerConfigurationFactory { public Cpu createCpu() { return new DeluxeCpu(); } public Ram createRam() { return new DeluxeRam(); } public Mainboard createMainboard() { return new DeluxeMainboard(); } public Harddisk createHarddisk() { return new DeluxeHarddisk(); } public Display createDisplay() { return new DeluxeDisplay(); } }

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

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

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

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

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

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

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

相关主题
文本预览
相关文档 最新文档