对象创建模式

2016-10-03  本文已影响40人  timber_wu

通过“对象创建”模式绕开new,来避免对象创建(new)过程中所导致的紧耦合(依赖工具类),从而支持对象创建的稳定。它是接口抽象之后的第一步工作。

典型模式

Factory Method 工厂方法

动机

模式定义

要点总结

Abstract Factory抽象工厂

定义

产品族:位于不同产品等级结构,功能相关联的产品组成的家族。
如图:


产品族

图中一共有四个产品族,分布于三个不同的产品等级结构中。只要指明一个产品所处的产品族以及它所属的等级结构,就可以唯一的确定这个产品。

所谓的抽象工厂是指一个工厂等级结构可以创建出分属于不同产品等级结构的一个产品族中的所有对象。如果用图来描述的话,如下图:

结构


图中描述的东西用产品族描述如下


举例

    //数据库访问有关的基类
    class IDBConnection{
    
    }
    
    class IDBCommand{
    
    }
    
    class IDataReader{
    
    }
    
    
    abstract class IDBFactory{
        public abstract IDBConnection createDBConnection();
        public abstract IDBCommand createDBCommand();
        public abstract IDataReader createDataReader();
        
    
    }
    
    //支持My SQL
    class MySqlConnection extends IDBConnection{
    
    }
    class MySqlCommand extends IDBCommand{
    
     }
    class MySqlDataReader extends IDataReader{
    
    }
    
    
    class MySqlDBFactory extends IDBFactory{
    
        @Override
        public IDBConnection createDBConnection() {
            return new MySqlConnection();
        }

        @Override
        public IDBCommand createDBCommand() {
            return new MySqlCommand();
        }
    
        @Override
        public IDataReader createDataReader() {
            return new MySqlDataReader();
        }
    
    
     }
    
    //支持Oracle
    class OracleConnection extends IDBConnection{
    
    }
    
    class OracleCommand extends IDBCommand{
    
    }
    
    class OracleDataReader extends IDataReader{
    
    }

    class OracleDBFactory extends IDBFactory{
    
        @Override
        public IDBConnection createDBConnection() {
            return new OracleConnection();
        }

        @Override
        public IDBCommand createDBCommand() {
            return new OracleCommand();
        }
    
        @Override
public IDataReader createDataReader() {
            return new OracleDataReader();
        }
    }
    
    
    class EmployeeDAO{
        IDBFactory dbFactory;
        public Vector<EmployeeDO> getEmployees(){
            IDBConnection connection =dbConnectionFactory.createDBConnection();
            connection.setConnectionString("...");

            IDBCommand command = dbCommandFactory.createDBCommand();
            command.setCommandText("...");
            command.setConnection(connection);//关联性
    
            IDBDataReader reader = command.executeReader();//关联性
            while (reader.read()) {
    
    
            }
    
            return employeeDOs;
        }
    
            
    }

在什么情形下使用抽象工厂模式:

上一篇 下一篇

猜你喜欢

热点阅读