当前位置:文档之家› java 工厂设计模式

java 工厂设计模式

java 工厂设计模式
java 工厂设计模式

工厂设计模式

一、概念

简单工厂模式是用一个实际的工厂来创建所有你想创建的对象,如果创建的对象太多,那么反而不利于维护,所以还必须要分配责任,这就有了工厂方法模式,相比于简单工厂,它把那个实际工厂划分出来许多小工厂,每个小工厂负责创建一个产品(对象),为了可以扩展,你可以抽象出来一个抽象的工厂类,然后每个小工厂实现这个抽象工厂接口。其他和简单工厂没什么区别。

二、使用时机

如果在创建对象时,创建的对象多且负责的情况下就可以使用工厂方法模式

三、优点和缺点

增加一个产品很简单,只要添加一个创建这个产品的实际工厂和一个此产品就可以了,简单清晰。缺点是增加了代码量,每个产品都必须增加一个工厂,虽然有两个产品有某种联系,但必须要使用两个工厂来创建这两个产品。

四、工厂模式使用:

Properties prop = new Properties();//1.创建读取properties文件的对象

InputStream is =

getProperties.class.getClassLoader().getResourceAsStream(fileName);

prop.load(is);

//prop.load(类名.class.getClassloader().getResourceAsStream(“文件

问.properties”));2加载文件的位置

str = prop.getProperty(key);//3由于propertiest都是key value对应的,getProperty就是拿到其中值

注意的一点是:

Static 中的方法和static属性,都不可能出现this,this就是对象自身引用,而static是静态区,对象是在堆区

类名:

不加包名的类名

完整类名:包名+类名

Java发射机制:通过拿到一个类的字节码,然后可以做与这个类相关的所有操作

1.一个java类只会被加载一次,一个类只有一个字节码

2.Class代表在内存中的字节码

3.如何获取字节码:

1.Class cl = T.Class;

2.Class c2 = new T().getClass();

3.Class c3 = Class.forName(“完整的类名”);

1. 在DBUtil中使用工厂模式是由于其中用户使用的数据库不同而导致其中MVC的Dao

中使用的sql语言和注册sql和连接数据库不同

package com.ecjtu.util;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.util.Properties;

import com.ecjtu.util.prop.getProperties;

publicclass DBUtil {

privatestatic String classNames ;

privatestatic String url ;

privatestatic String dbName ;

privatestatic String username;

privatestatic String password;

private DBUtil(){}

static{

classNames =

getProperties.getValueKey("JDBC.properties","classNames");

url = getProperties.getValueKey("JDBC.properties","url");

dbName = getProperties.getValueKey("JDBC.properties","dbName");

username =

getProperties.getValueKey("JDBC.properties","username");

password =

getProperties.getValueKey("JDBC.properties","password");

try {

Class.forName(classNames);

} catch (ClassNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

publicstatic Connection getConn(){

Connection conn = null;

try {

conn =

DriverManager.getConnection(url+dbName,username,password);

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return conn;

}

publicstatic PreparedStatementgetPstem(Connection conn,Stringsql){ PreparedStatementpstem = null;

try {

pstem = conn.prepareStatement(sql);

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return pstem;

}

publicstatic ResultSetgetRs(PreparedStatementpstem){

ResultSetrs = null;

try {

rs = pstem.executeQuery();

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return rs;

}

publicstaticvoid getClose(Connection conn, PreparedStatementpstem,ResultSetrs){

if(rs !=null){

try {

rs.close();

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

rs = null;

}

if(pstem !=null){

try {

pstem.close();

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

pstem = null;

}

if(conn !=null){

try {

conn.close();

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

conn = null;

}

}

}

2、由于有多个需要工厂模式,所以需要封装

packagecom.ecjtu.util.prop;

importjava.io.IOException;

importjava.io.InputStream;

importjava.util.Properties;

public class getProperties {

public static String getValueKey(String filName,String key){ String str = null;

Properties prop = new Properties();

InputStream is =

getProperties.class.getClassLoader().getResourceAsStream(filName);

try {

prop.load(is);

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}finally{

try {

is.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

str = prop.getProperty(key);

returnstr;

}

}

3、properties文件

ProductDao4MySqlImpl=com.ecjtu.product.dao.impl.ProductDao4MySqlImpl

4、在MVC格式中service需要与dao中的对象

privatestatic ProductDao productDao ;

publicstatic ProductDaogetProductDao(){

String p = getProperties.getValueKey("Product.properties", "ProductDao4MySqlImpl");

// System.out.println(p);

try {

productDao = (ProductDao) Class.forName(p).newInstance();

} catch (InstantiationException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

} catch (IllegalAccessException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

} catch (ClassNotFoundException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}

return productDao;

}

软件设计模式(JAVA)习题答案

软件设计模式(Java版)习题 第1章软件设计模式基础 1.1 软件设计模式概述 1.2 UML中的类图 1.3 面向对象的设计原则 一、名词解释 1.一个软件实体应当对扩展开放,对修改关闭,即在不修改源代码的基础上扩展 一个系统的行为。 2.一个对象应该只包含单一的职责,并且该职责被完整地封装在一个类中。 3.在软件中如果能够使用基类对象,那么一定能够使用其子类对象。 4.是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结, 使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 二、单选择题 1.( A ) 2.( A ) 3. ( A ) 4. ( D ) 5. ( D ) 6.( A ) 7. ( D ) 8.( D ) 9.( D ) 10.( E ) 11.( C ) 12.( C ) 13. ( A ) 三、多选择题 1.( A、B、C、D ) 2. ( A、B ) 3.( A、D ) 4.( A、B、C、D ) 四、填空题 1.依赖倒转、迪米特法则、单一职责 2.模式名字、目的、问题、解决方案、效果、实例代码 3.超类、子类 4.开闭 5.用户 6.依赖倒转 7.组合/聚合 8.结构型、行为型 9.依赖倒转 10.开闭 11.需求收集是否正确、体系结构的构建是否合理、测试是否完全 12.人与人之间的交流 13.接口 14.名称、目的、解决方案 15.对象组合、类继承

16.对象组合 17.对象组合、类继承 18.抽象类的指针 五、简答题 1.答:设计模式按类型分为以下三类: 1)创建型设计模式:以灵活的方式创建对象集合,用于管理对象的创建。 2)结构型设计模式:将己有的代码集成到新的面向对象设计中,用于处理类或对象的组合。 3)行为型设计模式:用于描述对类或对象怎样交互和怎样分配职责。 2.答:设计模式的主要优点如下: 1)设计模式融合了众多专家的经验,并以一种标准的形式供广大开发人员所用,它提供了一套通用的设计词汇和一种通用的语言以方便开发人员之间沟通和交 流,使得设计方案更加通俗易懂。 2)设计模式使人们可以更加简单方便地复用成功的设计和体系结构,将已证实的技术表述成设计模式也会使新系统开发者更加容易理解其设计思路。设计模式使得重用成功的设计更加容易,并避免那些导致不可重用的设计方案。 3)设计模式使得设计方案更加灵活,且易于修改。 4)设计模式的使用将提高软件系统的开发效率和软件质量,且在一定程度上节约设计成本。 5)设计模式有助于初学者更深入地理解面向对象思想,一方面可以帮助初学者更加方便地阅读和学习现有类库与其他系统中的源代码,另一方面还可以提高软件的设计水平和代码质量。 3.答:设计模式一般有如下几个基本要素:模式名称、问题、目的、解决方案、效 果、实例代码和相关设计模式,其中的关键元素包括模式名称、问题、解决方案和效果。 4.答:正确使用设计模式具有以下优点: ⑴可以提高程序员的思维能力、编程能力和设计能力。 ⑵使程序设计更加标准化、代码编制更加工程化,使软件开发效率大大提高,从 而缩短软件的开发周期。 ⑶使设计的代码可重用性高、可读性强、可靠性高、灵活性好、可维护性强。 5.答:根据类与类之间的耦合度从弱到强排列,UML中的类图有以下几种关系:依赖关 系、关联关系、聚合关系、组合关系、泛化关系和实现关系。其中泛化和实现的耦合度相等,它们是最强的。

java设计模式选择题复习

工厂系列模式的优缺点: 1.让用户的代码和某个特定类的子类的代码解耦 用户不必知道它所使用的对象是怎样创建的,只需知道该对象有哪些方法 2.抽象工厂模式可以为用户创建一系列相关的对象,使用户和创建这些对象的类脱耦 MVC模式是不是一种设计模式?为什么 MVC不是设计模式,应该是框架/架构模式,因为它的定义是抽象的,没有足够的细节描述使你直接去实现,而只能根据MVC的概念和思想,用几个设计模式组合实现。 举出一个生活中使用装饰者模式的例子,用程序实现思路 举个生活中的例子,俗话说“人在衣着马在鞍”,把这就话用装饰者模式的语境翻译一下,“人通过漂亮的衣服装饰后,男人变帅了,女人变漂亮了;”。对应上面的类图,这里人对应于ConcreteComponent,而漂亮衣服则对应于ConcreteDecorator; 设计模式如何分类,每一个类别都有什么特征? 设计模式分为3类,分别是:创建型模式、行为型模式、结构型模式。 创建型特点:避免用户直接使用new运算符创建对象。 行为型特点:怎样合理的设计对象之间的交互通信,以及怎样合理的为对象分配职 结构型特点:主要用于处理类或对象的组合 Java jdk中使用了哪些设计模式 1.单例 2.静态工厂 3.工厂方法 4.抽象工厂 5.构造者 6.原型 7.适配器8桥接9.组合10.装饰器11.外观12.享元 页脚内容1

14.代理15.迭代器16.观察者17.协调者18.模板方法19.策略20.责任链21.命令22.空对象25.解释器 面向对象的设计原则有哪些? 开闭原则、面向抽象的原则(依赖倒转原则)、多用组合少用继承原则、高内聚-低耦合原则。 观察者模式的推拉有什么不同?使用场景 推,具体主题将变化后的数据全部交给具体观察者。场景:当具体主题认为具体观察者需要这些变换后的数据时,往往采用推数据方式; 拉,具体主题不将变化后的数据交给具体观察者,而是提供获得这些数据的方法。场景:当具体主题不知道具体观察者是否需要这些变换后的数据时,往往采用拉数据的方式。 策略模式和工厂模式有什么不同? 策略模式定义了一系列算法,将他们一个个封装,并且他们之间可以相互替换; 工厂模式定义一个创建对象的接口,让子类决定实例化哪一个类 5观察者模式的推拉有什么不同?适用场景 现在要说的分歧在这里: “推”的方式是指,Subject维护一份观察者的列表,每当有更新发生,Subject会把更新消息主动推送到各个Observer去。 “拉”的方式是指,各个Observer维护各自所关心的Subject列表,自行决定在合适的时间去Subject获取相应的更新数据。 “推”的好处包括: 页脚内容2

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

《JAVA设计模式》期末考试复习

《J A V A设计模式》复习资料 一、单项选择题 1.设计模式起源于() A、机械设计 B、建筑工程设计 C、水利工程设计 D、工业电力化设计 2.“不要和陌生人说话”是()原则的通俗表述。 A、接口隔离 B、里氏替换 C、依赖倒置 D、迪米特3.目前常见的设计模式主要有()种。 A、23 B、21 C、32 D、28 4.以下关于单一职责原则的叙述不正确的是()。 A、单一职责原则的英文名称是SingleResponsibilityPrinciple. B、单一职责原则要求一个类只有一个职责 C、单一职责原则有利于对象的稳定,降低类的复杂性 D、单一职责原则提高了类之间的耦合性 5.以下关于依赖倒置原则的叙述不正确的是() A、依赖倒置原则的简称是DIP B、高层模块不依赖于低层模块,低层模块依赖于高层模块 C、依赖倒置原则中高层模块和低层模块都依赖于抽象 D、依赖倒置原则实现模块间的松耦合 6.下面关于单例模式说法错误的是() A、单例模式是指一个类只有一个实例 B、单例类从实现方式上分为懒汉式和饿汉式 C、单例类从功能上分为状态单例类和无状态单例类 D、可以通过继承的方式对单例类进行扩展得到功能更丰富的单例类7.下面关于工厂方法模式说法错误的是()。 A、工厂方法模式使一个类是实例化延迟到其子类中 B、工厂方法模式中具有抽象工厂、具体工厂、抽象产品和具体产品4个角色 C、工厂方法模式可以处理多个产品的多个等级结构 D、工厂方法模式可以屏蔽产品类 8.在以下情况不适合使用责任职责链模式() A、有多个对象可以处理请求,哪个对象处理该请求在运行时刻自动确定。 B、在需要用比较通用和复杂的对象指针代替简单的指针的时候。 C、你想在不明确指定接收者的情况下,向多个对象中的一个提交一个请求。 D、一个请求需要一系列的处理工作。 9.当我们想创建一个具体的对象而又不希望指定具体的类时,可以使用()模式 A、结构型 B、创建型 C、行为型 D、以上都可以 10.以下用来描述适配器模式的是()

java抽象工厂模式的实现实例

抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。根据LSP原则,任何接受父类型的地方,都应当能够接受子类型。因此,实际上系统所需要的,仅仅是类型与这些抽象产品角色相同的一些实例,而不是这些抽象产品的实例。换言之,也就是这些抽象产品的具体子类的实例。工厂类负责创建抽象产品的具体子类的实例。 当每个抽象产品都有多于一个的具体子类的时候,工厂角色怎么知道实例化哪一个子类呢?比如每个抽象产品角色都有两个具体产品。抽象工厂模式提供两个具体工厂角色,分别对应于这两个具体产品角色,每一个具体工厂角色只负责某一个产品角色的实例化。每一个具体工厂类只负责创建抽象产品的某一个具体子类的实例。 每一个模式都是针对一定问题的解决方案,工厂方法模式针对的是一个产品等级结构;而抽象工厂模式针对的是多个产品等级结果。 下面是一个java抽象工厂的实现实例. 我们以交通工具(Vihicle),食品(Foot),武器(Weapon)为抽象产品类为例: 交通工具(Vihicle) public abstract class Vihicle { public abstract void run(); } 食品(Foot) public abstract class Foot { public abstract void printName(); } 武器(Weapon) public abstract class Weapon { public abstract void shoot(); } 这三种抽象产品类都有两种子类的实现: 交通工具(Vihicle)有实现类Car,Broom public class Car extends Vihicle{ public void run(){ System.out.println("冒着烟奔跑中的Car..."); } } public class Broom extends Vihicle{ public void run(){ System.out.println("一路沙尘暴飞奔而来.."); } } 食品(Foot)有实现类Mushroom,Apple

9种java设计模式笔记

Java设计模式笔记 一.单例模式 1.单例模式(Singleton)表示一个类只能生成一个对象。 2.典型应用:Servlet就是使用的单例模式,不管多少个用户 访问一个Servlet都是访问的一个Servlet对象。 3.对于单例模式实现的想法: 1)首先明确生成一个类的对象时肯定要调用该类的构造方法。 2)那么我们必须要从构造方法入手解决一个类只能生成一个对象这一问题。 3)假设不提供构造方法,该类会默认是一个不带参数的构造方法,显然生成该类对象时还是会调用默认 的构造方法,还是无法解决问题 4)则我们肯定是要通过提供构造方法来解决这一问题,那么现在我们的问题是到底该提供怎样的构造 方法呢? 5)那么我们就想到一般的构造方法都是public的,在类的外部(其他类)可以调用该构造方法生成多个 对象,显然是不行的,那么我们就想到private关键 字,private表示只能类的内部才能访问。 6)那么现在我们想到可以把构造方法定义成一个私有(private)的,只有该类的内部才能访问,但是在类

的外面不能生成对象了,这样成为零例了,与单例很接近了。 7)那么我们需要在该类中提供一个返回唯一一个该类的对象供外部调用。但是现在我们构造方法外部都不能访问,没有对象该怎么访问这个类的指定方法呢? 8)那么我们想到把我们提供的方法定义成静态方法(非实例方法),就可以直接通过该类加点号访问该类的该方法了。 9)那么我们可以举一个单例的例子了: class Singleton{ private static Singleton singleton=new Singleton(); private Singleton(){ } public static Singleton getInstance(){ return singleton; } } 以上例子便是实现了单例模式,注意两个红色地方,静态的方法只能访问静态的属性。在类的外部直接通过类名加点号getInstance()访问唯一一个对象了。

设计模式考试复习题(含答案)

一、1. 设计模式一般用来解决什么样的问题: A.同一问题的不同表相 2. 下列属于面向对象基本原则的是: C.里氏代换 3. Open-Close原则的含义是一个软件实体:A.应当对扩展开放,对修改关闭. 4. 当我们想创建一个具体的对象而又不希望指定具体的类时,使用(A)模式。A.创建型 5. 要依赖于抽象不要依赖于具体。即针对接口编程不要针对实现编程:(D)依赖倒转原则 6. 依据设计模式思想,程序开发中应优先使用的是( A )关系实现复用。A, 委派 7. 设计模式的两大主题是( D ) D.系统复用与系统扩展 8. 单体模式中,两个基本要点(AB)和单体类自己提供单例A .构造函数私有 B.唯一实例 9. 下列模式中,属于行为模式的是( B ) B观察者 10. “不要和陌生人说话”是( D )原则的通俗表述 D.迪米特 1. 软件体系结构是指一个系统的有目的的设计和规划,这个设计规划既不描述活动,也不描述系统怎样开发,它只描述系统的组成元素及其相互的交互协作。 2.一个UML模型只描述了一个系统要做什么,它并没告诉我们系统是怎么做。 3.接口是可以在整个模型中反复使用的一组行为,是一个没有属性而只有方法的类。 4.多重性指的是,某个类有多个对象可以和另一个类的一对象关联。 5.当一个类的对象可以充当多种角色时,自身关联就可能发生。 6.在泛化关系中,子类可以替代父类。后前者出现的可以相同地方。反过来却不成立。 7.最通常的依赖关系是一个类操作的形构中用到了另一个类的定义。 8.组成是强类型的聚集,因为聚集中的每个部分体只能属于一个整体。 9.实现的符号和继承的符号有相似之处,两者的唯一差别是实现关系用虚线表示,继承关系用实线表示。 10. 设计模式中应优先使用对象组合而不是类继承。 1.适配器模式属于创建型模式结构型( F ) 2.在设计模式中,“效果”只是指“原因和结果”( T ) 3.设计模式使代码编制不能真正工程化( T ) 4.面向对象语言编程中的异常处理,可以理解为责任链模式(T ) 5.反模式就是反对在软件开发过程中使用设计模式分析:反模式用来解决问题的带有共性的不良方法(F ) 1.什么是设计模式?设计模式目标是什么? 答:设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解,保证代码可靠性。 2.设计模式中一般都遵循的原则有什么? 答:开闭原则、根据场景进行设计原则、优先组合原则、包容变化原则 3.“Gang of Four”针对“创建优秀面向对象设计”建议了哪些策略? 答:针对接口编程、优先使用对象组合而不是类继承,找到并封装变化点。 4.面向对象系统中功能复用的两种最常用技术是什么? 答:类继承和对象组合,类继承允许你根据其他类的实现来定义一个类的实现。父类的内部细节对子类可见。 类继承是在编译时刻静态定义的,且可直接使用,类继承可以较方便地改变被复用的实现。对象组合是类继承之外的另一种复用选择。新的更复杂的功能可以通过组装或组合对象来获得。对象组合要求被组合的对象具有良好定义的接口。 5.只根据抽象类中定义的接口来操纵对象有什么好处? 答:1) 客户无须知道他们使用对象的特定类型,只须对象有客户所期望的接口。 2) 客户无须知道他们使用的对象是用什么类来实现的,他们只须知道定义接口的抽象类。 五、应用题(分值15) 公司架构:经理、工程师、技师和后勤人员都是公司的雇员,经理管理工程师、技师和后勤人员。高层经理领导较低级别的经理。典型层次图如下:可以使用哪种设计模式实现公司的层级关系?并说明为什么? 组合模式,第一,其公司关系架构为树形结构;第二,其表示了部分-整体关系(自己扩展)

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

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)对象,

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

uml设计模式三个工厂类图代码详解

工厂模式在《Java与模式》中分为三类: 1)简单工厂模式(Simple Factory):不利于产生系列产品; 2)工厂方法模式(Factory Method):又称为多形性工厂; 3)抽象工厂模式(Abstract Factory):又称为工具箱,产生产品族,但不利于产生新的产品; 这三种模式从上到下逐步抽象,并且更具一般性。 GOF在《设计模式》一书中将工厂模式分为两类:工厂方法模式(Factory Metho d)与抽象工厂模式(Abstract Factory)。将简单工厂模式(Simple Factory)看为工厂方法模式的一种特例,两者归为一类。 二、简单工厂模式 简单工厂模式又称静态工厂方法模式。重命名上就可以看出这个模式一定很简单。它存在的目的很简单:定义一个用于创建对象的接口。 在简单工厂模式中,一个工厂类处于对产品类实例化调用的中心位置上,它决定那一个产品类应当被实例化, 如同一个交通警察站在来往的车辆流中,决定放行那一个方向的车辆向那一个方向流动一样。 先来看看它的组成: 1) 工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑。在java中它往往由一个具体类实现。 2) 抽象产品角色:它一般是具体产品继承的父类或者实现的接口。在java中由接口或者抽象类来实现。 3) 具体产品角色:工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现。 三、工厂方法模式 工厂方法模式是简单工厂模式的进一步抽象化和推广,工厂方法模式里不再只由一个工厂类决定那一个产品类应当被实例化,这个决定被交给抽象工厂的子类去做。 来看下它的组成: 1)抽象工厂角色:这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。在java中它由抽象类或者接口来实现。 2)具体工厂角色:它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。 3)抽象产品角色:它是具体产品继承的父类或者是实现的接口。在java中一般有抽象类

JAVA三种设计模式

一、单例模式 简介: 1.单例模式(Singleton Pattern)是Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 2.这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。 特点: 1.单例类只能有一个实例。 2.单例类必须自己创建自己的唯一实例。 3.单例类必须给所有其他对象提供这一实例。 介绍: 1.意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点。 2.主要解决:一个全局使用的类频繁地创建与销毁。 3.何时使用:当您想控制实例数目,节省系统资源的时候。 4.如何解决:判断系统是否已经有这个单例,如果有则返回,如果没有则创建。 5.关键代码:构造函数是私有的。 实现方法: 1.懒汉试,线程不安全:多用户同时调用时不能保证对象的唯一性。 2.懒汉式,线程安全:在调用得到对象方法时,加关键字:synchronized,实现调用对象时排队(加锁),缺点是效率低下。 3.饿汉式:线程安全,但是容易产生垃圾,浪费内存,因为加载类的同时创建了自身唯一对象。 4.双检锁/双重校验锁:多用户可以同时调用,调用if条件判断对象的唯一性,即有没有创建过的对象,如果有直接返回,若没有,用户新建,因为方法有static 修饰,所以,用户新建后,其他用户调用的对象可以保证是唯一的。 二、模板模式 简介: 1.单在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。 2.意图:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 3.主要解决:一些方法通用,却在每一个子类都重新写了这一方法。 4.何时使用:有一些通用的方法。 5.如何解决:将这些通用算法抽象出来。 6.关键代码:在抽象类实现,其他步骤在子类实现。 7.优点:1、封装不变部分,扩展可变部分。2、提取公共代码,便于维护。3、行为由父类控制,子类实现。 8.缺点:每一个不同的实现都需要一个子类来实现,导致类的个数增加,使得系统更加庞大。 9.使用场景:1、有多个子类共有的方法,且逻辑相同。2、重要的、复杂的方

由浅入深学“工厂模式”

由浅入深学“工厂模式”(1) 2007-03-25 17:13 1、传授设计模式中存在的问题 我个人最近对设计模式中的工厂模式进行了比较深入的学习,通过学习感悟出,现在很多设计模式传道者,在讲述设计模式的过程中存在一些问题,使得设计模式变得很难理解。设计模式本身很抽象,但是这些传道者在讲述的过程中,将一个抽象的东西讲的更抽象,从而使我们望而却步。有些人在讲述的时候, 没有考虑读者的注意力。比如我在看《C#设计模式》的时候,在讲述抽象工厂 模式的时候,直接就进入了一个示例,而且这个例子比较复杂,涉及了比较多的概念、术语,而且还有算法要处理。但是这些和要讲述的核心内容无关,我想要看懂他的示例就要将这个东西都搞懂,就分散了我的注意力。我个人总结,学习设计模式的方法是,首先找到一个突破口,比如可以先学习构造型模式中简单的模式,将它理解、熟练应用。通过对一、两个模式有一个深入的认识之后,再学习其它比较复杂一点的模式就容易多了,这是一种迭代的思想在学习中的应用。另外学习任何一种设计模式的过程应该是具体-抽象-再具体这个的一个过程。这句话的意思是首先通过一个比较具体一点的例子来帮助理解设计模式,在理解之后将你的理解扩展到解决这一类问题,上升到一定的理论高度。然后就是再到具体,也就是应用设计模式,应用理论解决自己遇到的实际问题。 2、学习工厂模式的预备知识: 首先声明这些预备知识并不是工厂模式仅仅需要,因为我先讲述工厂模式,所以在学习工厂模式之前将这些问题提出。 2.1 Upcasting: Upcasting中文翻译有好几个,比如向上类型转换、向上转型、上溯造型。我个人比较喜欢向上转型这个翻译,即简单又含义明确。向上转型这个概念,我在Bruce Eckel的Thinking in c++、Thinking in Java中都看到过,我不是很确定这个概念 是否是他提出来的。向上转型是把一个派生类当作它的基类使用。我们将一个更特殊的类型转换到一个更常规的类型,这当然是安全的。派生类是基类的一个超集。它可以包含比基类更多的方法,但它至少包含了基类的方法。向上转型给我们带来的好处就是我们可以将不同的派生通过一种统一的方式进行处理。向上转型带来的弊端就是我们向上转型的过程会丢失派生类的接口。既然有向上转型,

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

Java简单工厂 简单工厂不是一个标准的设计模式,但是它实在是太常用了,简单而又神奇,所以还是需要好好掌握的,就当是对学习设计模式的热身运动吧。 为了保持一致性,我们尽量按照学习其它模式的步骤来进行学习。 1 场景问题 大家都知道,在Java应用开发中,要“面向接口编程”。 那么什么是接口?接口有什么作用?接口如何使用?一起来回顾一下: 1.1 接口回顾 (1)Java中接口的概念 在Java中接口是一种特殊的抽象类,跟一般的抽象类相比,接口里面的所有方法都是抽象方法,接口里面的所有属性都是常量。也就是说,接口里面是只有方法定义而不会有任何方法实现。 (2)接口用来干什么 通常用接口来定义实现类的外观,也就是实现类的行为定义,用来约束实现类的行为。接口就相当于一份契约,根据外部应用需要的功能,约定了实现类应该要实现的功能,但是具体的实现类除了实现接口约定的功能外,还可以根据需要实现一些其它的功能,这是允许的,也就是说实现类的功能包含但不仅限于接口约束的功能。 通过使用接口,可以实现不相关类的相同行为,而不需考虑这些类之间的层次关系,接口就是实现类对外的外观。 (3)接口的思想 根据接口的作用和用途,浓缩下来,接口的思想就是“封装隔离”。 通常提到封装是指对数据的封装,但是这里的封装是指“对被隔离体的行为的封装”,或者是“对被隔离体的职责的封装”;而隔离指的是外部调用和内部实现,外部调用只能通过接口进行

调用,而外部调用是不知道内部具体实现的,也就是说外部调用和内部实现是被接口隔离开的。(4)使用接口的好处 由于外部调用和内部实现被接口隔离开了,那么只要接口不变,内部实现的变化就不会影响到外部应用,从而使得系统更灵活,具有更好的扩展性和可维护性,这也就是所谓“接口是系统可插拔性的保证”这句话的意思。 (5)接口和抽象类的选择 既然接口是一种特殊的抽象类,那么在开发中,何时选用接口,何时选用抽象类呢? 对于它们的选择,在开发中是一个很重要的问题,特别总结两句话给大家:?优先选用接口 ?在如下情况应选择抽象类:既要定义子类的行为,又要为子类提供公共的功能 1.2 面向接口编程 面向接口编程是Java编程中的一个重要原则。 在Java 程序设计里面,非常讲究层的划分和模块的划分。通常按照三层来划分Java程序,分别是表现层、逻辑层、数据层,它们之间都要通过接口来通讯。 在每一个层里面,又有很多个小模块,一个小模块对外也应该是一个整体,那么一个模块对外也应该提供接口,其它地方需要使用到这个模块的功能,都应该通过此接口来进行调用。这也就是常说的“接口是被其隔离部分的外观”。基本的三层结构如图1所示:

冶金设计基础

1. 设计:设计是把一种计划、规划、设想通过视觉的形式传达出来的活动过程。设计包括 图纸、计算书、工艺流程、说明书等,包括解决技术的、劳动组织的、社会的和经济的问题的方案,包括必须的设备和生产方案。 2. 冶金工厂建设:指冶金工厂的建造,不仅包括工厂所在地的施工和安装,还包括要建造 一座冶金工厂得到产品全过程的工作组合。 3. 冶金工厂建设程序:冶金工厂建设工作按照规定的时间和空间排列形成一定的过程,或 者工作程序。①设计前期工作:规划、项目建议书、厂址选择、可行性研究报告、环境影响报告书、设计任务书;②设计工作:初步设计、技术设计(复杂项目)、施工图设计; ③项目实施:建设准备工作、项目实施阶段、试生产和考核验收、建设项目的后评价。 4.项目建议书(估算):①定义:项目建议书是在对项目进行初步调查、预测、分析后,描 述工程项目的建设条件、生产规模与产品方案、生产工艺技术、环境保护、投资与效益等大致设想,并用于向政府部门提出的技术报告书。②内容:(1)项目建设的必要性和依据(2)产品方案、拟建规模、建设地点和生产工艺的初步设想;(3)资源和建设条件的初步分析;(4)环境影响的初步估计;(5)建设进度的安排;(6)投资总额的估算和资金筹措的初步设想;(7)经济效益和社会效益的初步评估;(8)建设单位的概况;(9)必要的附件和附图等。③作用:是建设项目的轮廓设想和立项的先导,是为建设项目取得建设资格而提出的建议,并且作为开展可行性研究的依据。它用于上报政府部门,使之对工程项目作出初步决策。 5. 可行性研究(估算精度较高):①定义:以预测为前提,以投资效果为目的,从技术上、 经济上、管理上进行全面综合分析研究的方法。②内容:(1)项目提出的背景(建设单位企业现况)、建设的必要性、研究工作的依据和范围。(2)对产品的需求和价格等进行预测;对拟建规模、产品方案进行论证和研究并推荐出最佳方案。(3)项目建设内容、建设条件的论证和建厂方案的比选,具体内容包括:项目构成范围,工艺流程和主要设备选型的比较,资源、原材料和燃料供应的论证,供水、供电和运输条件的论证,土建结构形式的初步选择,公辅设施的初步选择(改、扩建项目需对原有设施利用情况加以说明)。(4)环境保护和三废治理方案的论述。(5)建设工期和实施进度的建议。 (6)投资估算和资金筹措意见。(7)经济效益和社会效益分析,投资环境评价。(8)存在问题和解决问题的建议。③作用:(1)政府部门和业主对工程项目批准的最终决策和保证投入的资金能发挥最大效益所提供的科学依据。(2)是进行初步设计、向银行或金融部门申请贷款、业主(建设单位)与建设项目有关部门签订合作协议的依据。(3)是技术开发、设备引进、安排科学研究、国家或地区编制长远规划的重要参考资料。 6. 初步设计(概算):①定义:初步设计是研究和解决工厂设计各项重大原则和方案的设计 阶段。②内容:(1)满足“六定”:定规模、定设备、定方案、定定员、定投资额、定总体。(2)初步设计文件包括以下内容:设计说明书、设计图纸、设备表、概算书。 ③作用:各个专业互相配合、进行概算、解决掉一些技术难点。 7. 施工图设计(施工图预算:施工图设计阶段对工程建设所需资金作出较精确计算的设计 文件。施工图修正概算:A施工图设计与初步设计相比有较大变化;B原初步设计概算的基础资料发生变化;C建设单位提出要求重新编制概算。如果不存在上述问题,施工图修正概算可以不编。施工图修正概算)①定义:把初步设计的内容转化成图纸的过程,是工程设计程序的最后阶段,为工厂设备的加工制造与安装、厂房基础以及其他构筑物的施工提供技术依据。②内容:(1)施工和安装所需要的全部图纸;(2)重要施工、安装部位和生产环节的施工操作说明;(3)非标准设备的制造图、技术数据和特殊制作要求说明;(4)施工图设计说明;(5)设备材料明细表,设备订货表。 ③作用:控制工程造价,补充初步设计中尚需编制补充的设备表。

《JAVA设计模式》期末考试复习资料

《JAVA设计模式》复习资料 一、单项选择题 1.设计模式起源于() A、机械设计 B、建筑工程设计 C、水利工程设计 D、工业电力化设计 2.“不要和陌生人说话”是()原则的通俗表述。 A、接口隔离 B、里氏替换 C、依赖倒置 D、迪米特 3.目前常见的设计模式主要有()种。 A、23 B、21 C、32 D、28 4.以下关于单一职责原则的叙述不正确的是()。 A、单一职责原则的英文名称是Single Responsibility Principle. B、单一职责原则要求一个类只有一个职责 C、单一职责原则有利于对象的稳定,降低类的复杂性 D、单一职责原则提高了类之间的耦合性 5.以下关于依赖倒置原则的叙述不正确的是() A、依赖倒置原则的简称是DIP B、高层模块不依赖于低层模块,低层模块依赖于高层模块 C、依赖倒置原则中高层模块和低层模块都依赖于抽象 D、依赖倒置原则实现模块间的松耦合 6.下面关于单例模式说法错误的是() A、单例模式是指一个类只有一个实例 B、单例类从实现方式上分为懒汉式和饿汉式 C、单例类从功能上分为状态单例类和无状态单例类 D、可以通过继承的方式对单例类进行扩展得到功能更丰富的单例类 7.下面关于工厂方法模式说法错误的是()。 A、工厂方法模式使一个类是实例化延迟到其子类中 B、工厂方法模式中具有抽象工厂、具体工厂、抽象产品和具体产品4个角色 C、工厂方法模式可以处理多个产品的多个等级结构 D、工厂方法模式可以屏蔽产品类 8.在以下情况不适合使用责任职责链模式() A、有多个对象可以处理请求,哪个对象处理该请求在运行时刻自动确定。 B、在需要用比较通用和复杂的对象指针代替简单的指针的时候。 C、你想在不明确指定接收者的情况下,向多个对象中的一个提交一个请求。 D、一个请求需要一系列的处理工作。 9.当我们想创建一个具体的对象而又不希望指定具体的类时,可以使用()模式 A、结构型 B、创建型 C、行为型 D、以上都可以 10.以下用来描述适配器模式的是() A、表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。 B、定义一个用于创建对象的接口,让子类决定实例化哪一个类。

07371200冶金工厂设计基础

冶金工厂设计基础 Design Base of Steelmaking Plant 课程编号:07371200 学分: 1.5 学时:24 (其中:讲课学时:24 实验学时:0 上机学时:0 ) 先修课程:物理化学、钢铁冶金学、冶金物理化学、有色金属冶金学 适用专业:冶金工程 教材:《冶金工厂设计基础》,王德全;东北大学出版社,2004 开课学院:材料科学与工程学院 一、课程的性质与任务: 《冶金工厂设计基础》是冶金工程专业选修的一门主要专业课。《冶金工厂设计基础》的内容包括“冶金工艺设计”和“冶金工厂设计”等几部分内容。课程的基本任务: 1.了解冶金工厂建设程序和工程设计; 2.掌握冶金工艺流程的设计和钢铁冶金主体厂的设计 二、课程的基本内容及要求: 第一章冶金工厂设计概述 1.教学内容 (1)冶金工厂建设程序; (2)冶金工厂设计的基本知识设计单位的专业设置、专业之间的关系; (3)前期设计可行性研究、项目建议书、厂址选择; (4)工程设计设计基础资料、初步设计、技术设计。 2.学习要求 (1)掌握冶金工厂建设的前期设计; (2)掌握工程设计的步骤。 3.重难点 (1)重点是冶金工程设计的步骤; (2)难点是如何撰写设计资料文案。 第二章工艺流程选择与设计 1.教学内容 (1)工艺流程选择与设计 (2)工艺流程图的绘制 2.学习要求 (1)掌握工艺流程选择的原则; (2)方案比较及工艺流程图和设备连接图的绘制。。

3.重难点 (1)重点是工艺流程选择; (2)难点是工艺流程方案比较。 第三章厂址选择与平面布置 1.教学内容 (1)厂址选择的原则 (2)厂址选择的程序 (3)典型冶金工厂的平面布置 2.学习要求 (1)能够根据要求进行厂址选择; (2)能够初步完成平面布置方案。 3.重难点 (1)重点是厂址方案比较; (2)难点是平面布置方案确定。 第四章炼铁厂设计 1.教学内容 (1)炼铁厂的构成和设计原则 (2)炼铁工艺技术经济指标的确定 (3)平面布置和总图运输 (4)高炉冶金计算、高炉主体设备、高炉附属设备的设计概述 2.学习要求 (1)了解炼铁厂设计基本内容; (2)掌握冶金专业主要炼铁设计内容。 3.重难点 (1)重点是高炉冶金计算、高炉主体设备、高炉附属设备的设计; (2)难点是平面布置和总图运输。 第五章炼钢厂设计 1.教学内容 (1)炼钢厂设计的原则和主要技术经济指标; (2)典型炼钢流程的设计和超高功率电炉设计(工艺、装备、技术介绍与设计)。2.学习要求 (1)了解炼钢厂设计基本内容; (2)了解超高功率电炉设计内容。 3.重难点

java工厂模式

J a v a工厂模式 Java工厂模式看了这么多关于工厂模式的讲解,还是觉得这篇文章讲的好理解,贴出来和大家分享分享。一、引子话说十年前,有一个****户,他家有三辆汽车——Benz奔驰、Bmw宝马、Audi奥迪,还雇了司机为他开车。不过,****户坐车时总是怪怪的:上Benz车后跟司机说“开奔驰车!”,坐上Bmw后他说“开宝马车!”,坐上Audi说“开奥迪车!”。你一定说:这人有病!直接说开车不就行了!而当把这个****户的行为放到我们程序设计中来时,会发现这是一个普遍存在的现象。幸运的是,这种有病的现象在OO(面向对象)语言中可以避免了。下面就以Java语言为基础来引入我们本文的主题:工厂模式。二、分类工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。工厂模式在《Java与模式》中分为三类:1)简单工厂模式(Simple Factory)2)工厂方法模式(Factory Method)3)抽象工厂模式(Abstract Factory)这三种模式从上到下逐步抽象,并且更具一般性。GOF在《设计模式》一书中将工厂模式分为两类:工厂方法模式(Factory Method)与抽象工厂模式(Abstract Factory)。将简单工厂模式(Simple Factory)看为工厂方法模式的一种特例,两者归为一类。两者皆可,在本文使用《Java与模式》的分类方法。下面来看看这些工厂模式是怎么来“治病”的。 三、简单工厂模式简单工厂模式又称静态工厂方法模式。重命名上就可以看出这个模式一定很简单。它存在的目的很简单:定义一个用于创建对象的接口。先来看看它的组成:1) 工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑。在java中它往往由一个具体类实现。2) 抽象产品角色:它一般是具体产品继承的父类或者实现的接口。在java中由接口或者抽象类来实现。 3) 具体产品角色:工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现。那么简单工厂模式怎么来使用呢我们就以简单工厂模式来改造****户坐车的方式——现在****户只需要坐在车里对司机说句:“开车”就可以了。代码:意返回类型为抽象产品角色public static Car driverCar(String s)throws Exception{ .... else throw new Exception(); 。。。.... public class Magnate{ public static void main(String[] args){ try{ . //有请****户先生public class Magnate{ public static void main(String[] args){ try{ Driver driver = new BenzDriver(); Car car = (); (); } …… } 可以看出工厂方法的加入,使得对象的数量成倍增长。当产品种类非常多时,会出现大量的与之对应的工厂对象,这不是我们所希望的。因为如果不能避免这种情况,可以考虑使用简单工厂模式与工厂方法模式相结合的方式来减少工厂类:即对于产品树上类似的种类(一般是树的叶子中互为兄弟的)使用简单工厂模式来实现。五、小结工厂方法模式仿佛已经很完美的对对象的创建进行了包装,使得客户程序中仅仅处理抽象产品角色提供的接口。那我们是否一定要在代码中遍布工厂呢大可不必。也许在下面情况下你可以考虑使用工厂方法模式:1)当客户程序不需要知道要使用对象的创建过程。2)客户程序使用的对象存在变动的可能,或者根本就不知道使用哪一个具体的对象。 简单工厂模式与工厂方法模式真正的避免了代码的改动了没有。在简单工厂模式中,新产品的加入要修改工厂角色中的判断语句;而在工厂方法模式中,要么将判断逻辑留在抽象工厂角色中,要么在客户程序中将具体工厂角色写死(就象上面的例子一样)。而且产品对象创建条件的改变必然会引起工厂角色的修改。面对这种情况,Java的反射机制与配置文件的巧妙结合突破了限制——这在Spring中完美的体现了出来。六、抽象工厂模式先来认识下什么是产品族:位于不同产品等级结构中,功能相关联的产品组成的家族。还是让我们用一个例子来形象地说明一下吧。 回到抽象工厂模式的话题上。可以说,抽象工厂模式和工厂方法模式的区别就在于需要创建对象的复杂程度上。而且抽象工厂模式是三个里面最为抽象、最具一般性的。抽象工厂模式的用意为:给客户端提供一个接口,可以创建多个产品族中的产品对象而且使用抽象工厂模式还要满足一下条件:1)系统中有多个产品族,而系统一次只可能消费其中一族产品。 2)同属于同一个产品族的产品以其使用。来看看抽象工厂模式的各个角色(和工厂方法的如出一辙): 1)抽象工厂角色:这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。在java中它由抽象类或者接口来实现。2)具体工厂角色:它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。在java中它由具体的类来实现。 3)抽象产品角色:它是具体产品继承的父类或者是实现的接口。在java中一般有抽象类或者接口来实现。 4)具体产品角色:具体工厂角色所创建的对象就是此角色的实例。在java中由具体的类来实现。看过了前两个模式,对这个模式各个角色之间的协调情况应该心里有个数了,我就不举具体的例子了。只是一定要注意满足使用抽象工厂模式的条件哦。

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