`

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,显然客户端代码需要改动

又上例我们也可以看到,尽管我们的简单工厂模式解决了,客户端代码不用修改的目的,但是当增加新的产品时,工厂类必须要修改,这样扩展性就有了限制了。



分享到:
评论
1 楼 LyAn_爱踢爱死 2014-08-11  
对于最后一句话,楼主能不能大概的讲解下。比如怎么修改啊

相关推荐

Global site tag (gtag.js) - Google Analytics