我有一个名为DatabaseModel
的课程。
一个名为DatabaseEngineInterface
的接口,它具有以下方法:
插入
更新
删除
选择
所以我可以在运行时确定使用哪个引擎mysql
或oracle
这些类是实现DatabaseEngineInterface
EngineDatabase engine = new MySQLEngine();
DatabaseModel db = new DatabaseModel(engine);
这种设计模式叫做什么?
答案 0 :(得分:3)
具体来说,这是构造函数注入模式(在my book中描述),这是Strategy pattern的一个特例。
答案 1 :(得分:0)
它不是strategy pattern的实现吗?维基百科指出战略模式是:
>a software design pattern that enables an algorithm's behavior to be selected at runtime
它还说战略模式:
您允许在运行时选择将使用的数据库(以及行为)。您已经定义了一系列算法(您的接口),封装了每个算法(通过为每个提供程序创建一个类),并且它们可以互换使用,因为DatabaseMode
l仅取决于接口。
答案 2 :(得分:0)
DaoFactory设计模式非常适合您的实施。
接口
public interface DatabaseEngineInterface {
public void insert(User user);
public void update(User user);
public void delete(int userId);
}
实现上述方法的类:
public class DatabaseModel implements DatabaseEngineInterface {
@Override
public void delete(int userId) {
// delete user from user table
}
@Override
public User[] findAll() {
// get a list of all users from user table
return null;
}
@Override
public User findByKey(int userId) {
// get a user information if we supply unique userid
return null;
}
@Override
public void insert(User user) {
// insert user into user table
}
@Override
public void update(User user) {
// update user information in user table
}
}
厂
public class DatabaseModelDAOFactory {
public static UserDAO getUserDAO(String type) {
if (type.equalsIgnoreCase("mysql")) {
return new UserDAOMySQLImpl();
} else {
return new UserDAOORACLEImpl();
}
}
}
客户端代码:
然后,在客户端而不是硬编码的行,如:
DatabaseModel userDAO=DatabaseModelDAOFactory.getUserDAODatabaseEngineInterface("jdbc");
你可以让一个属性文件动态地在DAO之间切换,从你可以简单地执行的属性文件中检索到该字符串:
DatabaseModel userDAO=DatabaseModelDAOFactory.getUserDaoDatabaseEngineInterface(myStringFromPropertiesFile);
myStringFromPropertiesFile将包含" mysql"或者" oracle"根据属性文件中的定义。