首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

Java设计形式之-简单工厂模式

2012-10-28 
Java设计模式之-简单工厂模式工厂模式把对象的创建和使用分离,这样做的好处是分离具体对象的创建和使用,达

Java设计模式之-简单工厂模式

工厂模式把对象的创建和使用分离,这样做的好处是分离具体对象的创建和使用,达到了尽量少的代码修改。

?

简单工厂模式又被称之为静态工厂方法模式,它是通过一个静态方法进行对象的实例化。

?

?

下面是一个数据库的操作工厂类,里面有三种数据库的操作类,如果直接使用对象:

MySqlOperate mySqlOperate = new MySQLOperate();

?

当数据库改成Oracle时,客户端的代码需要修改,而如果使用工厂模式:

DataOperate dataOperate = DataOperateFactory.getInstance();

?

这样做客户端代码就不需要关心是Mysql,还是Oracle了,修改Oracle时,只要修改工厂类的方法就可以了,当然下面的dataType可以写到配置文件里,这样,只要修改配置文件就可以轻松切换到Oracle了。

?

public class DataOperateFactory {??? public static final int ORACLE = 0; //定义三个表示数据库类型的常量??? public static final int MYSQL = 1;??? public static final int SQLSERVER = 2;???? private static DataOperate db;??? private static int dataType = MYSQL;??? /**??? ?* 根据数据库类型(dataType)取得一个数据库操作类的实例,??? ?* 这里对DataOperate使用了单例模式,因为OracelDataOperate等都是无状态的工具类,??? ?* 所以整个系统只保留一个实例就行了。??? ?* ??? ?* @return 返回的是接口,客户端不必关心具体是用那个实现类??? ?*/??? public static DataOperate getInstance() {??????? if (db == null) {??????????? if (dataType == ORACLE) //根据dateType返回相应的实现类??????????????? return new OracelDataOperate();??????????? if (dataType == MYSQL)??????????????? return new MysqlDataOperate();??????????? if (dataType == SQLSERVER)??????????????? return new SqlserverDataOperate();??????? }??????? return db;??? }}
由上例可以看到,客户端代码不用改变,这个很重要,比如说你给第三方提供jar包,客户端调用代码刚开始是采用Mysql的,后来改成Oracle,显然客户端代码需要改动
又上例我们也可以看到,尽管我们的简单工厂模式解决了,客户端代码不用修改的目的,但是当增加新的产品时,工厂类必须要修改,这样扩展性就有了限制了。


热点排行