

原始程序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
/*数据库管理程序*/ class EmployeeDAO{ public: vector<EmployeeDO> GetEmployees(){ SqlConnection* connection = new SqlConnection(); connection->ConnectionString = "...";
SqlCommand* command = new SqlCommand(); command->CommandText="..."; command->SetConnection(connection);
SqlDataReader* reader = command->ExecuteReader(); while (reader->Read()){
}
} };
|
重构程序1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
|
//数据库访问有关的基类 class IDBConnection{
}; class IDBConnectionFactory{ public: virtual IDBConnection* CreateDBConnection()=0; };
class IDBCommand{
}; class IDBCommandFactory{ public: virtual IDBCommand* CreateDBCommand()=0; };
class IDataReader{
}; class IDataReaderFactory{ public: virtual IDataReader* CreateDataReader()=0; };
//支持SQL Server class SqlConnection: public IDBConnection{
}; class SqlConnectionFactory:public IDBConnectionFactory{
};
class SqlCommand: public IDBCommand{
}; class SqlCommandFactory:public IDBCommandFactory{
};
class SqlDataReader: public IDataReader{
}; class SqlDataReaderFactory:public IDataReaderFactory{
};
//支持Oracle class OracleConnection: public IDBConnection{
};
class OracleCommand: public IDBCommand{
};
class OracleDataReader: public IDataReader{
};
class EmployeeDAO{ IDBConnectionFactory* dbConnectionFactory;//可能传入SQL IDBCommandFactory* dbCommandFactory;//可能传入Oracle IDataReaderFactory* dataReaderFactory;//它们三个必须是同一系列的。所有就有了abstract factory模式 //因此需要将这三个合成同一个工厂,以保证关联性
public: vector<EmployeeDO> GetEmployees(){ IDBConnection* connection = dbConnectionFactory->CreateDBConnection(); connection->ConnectionString("...");
IDBCommand* command = dbCommandFactory->CreateDBCommand(); command->CommandText("..."); command->SetConnection(connection); //关联性
IDBDataReader* reader = command->ExecuteReader(); //关联性 while (reader->Read()){
}
} };
|
重构程序2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
|
//数据库访问有关的基类 class IDBConnection{
};
class IDBCommand{
};
class IDataReader{
};
class IDBFactory{ public: virtual IDBConnection* CreateDBConnection()=0; virtual IDBCommand* CreateDBCommand()=0; virtual IDataReader* CreateDataReader()=0;
};
//支持SQL Server class SqlConnection: public IDBConnection{
}; class SqlCommand: public IDBCommand{
}; class SqlDataReader: public IDataReader{
};
class SqlDBFactory:public IDBFactory{ public: virtual IDBConnection* CreateDBConnection(); virtual IDBCommand* CreateDBCommand(); virtual IDataReader* CreateDataReader();
};
//支持Oracle class OracleConnection: public IDBConnection{
};
class OracleCommand: public IDBCommand{
};
class OracleDataReader: public IDataReader{
};
class EmployeeDAO{ IDBFactory* dbFactory;
public: vector<EmployeeDO> GetEmployees(){ IDBConnection* connection = dbFactory->CreateDBConnection(); connection->ConnectionString("...");
IDBCommand* command = dbFactory->CreateDBCommand(); command->CommandText("..."); command->SetConnection(connection); //关联性
IDBDataReader* reader = command->ExecuteReader(); //关联性 while (reader->Read()){
}
} };
|




上一篇:设计模式之4.3 Prototype 原形模式
下一篇:设计模式之4.1 Factory Method 工厂模式
近期评论