我目前正在实现数据库连接的抽象工厂模式,我需要分离业务逻辑,并且需要为每个需要连接到我的应用程序的新数据库类型重写代码, 所以在这一点上我有这些类
Interface Connection{}
MySql implements Connection{}
PostgreSql implements Connection{}
所以这里的问题是每个实现接口Connection的类都必须重写接口中的方法,我需要一个类,其中有一些常规方法,如setStatement,executeQuery等,但是som方法需要是像connect方法一样被覆盖,这取决于数据库类型,
我的第一个想法是在接口Connection和子类之间有一个额外的类, 保留和使用方法的地方,如果没有被覆盖,但这个解决方案感觉不是正确的方法(纠正我,如果我错了)
Interface ConnectionInterface{}
class Connection{}
MySql extends Connection{}
PostgreSql extends Connection{}
由于
答案 0 :(得分:2)
没错。但我会这样做:
interface Connection{}
abstract class AbstractConnection implements Connection {}
final class MySql extends AbstractConnection{}
final class PostgreSql extends AbstractConnection{}
使用Java 8,您还可以在界面中使用默认方法,并省略抽象类。
完全替代的方法是提供方法的类DefaultConnectionOperations
。然后你可以有一个这个类的对象,它被注入到每个Connection-Implementation中。但是,如果你的情况下需要依赖注入,这是有争议的。
答案 1 :(得分:0)
我不明白为什么不考虑State design pattern过继承。这是一个额外的very good post - 为什么?
通过这样做
每个新的数据库类型
可以在其类型更改时更改Connection
行为。也会出现相应的变化。状态模式还允许您保持前状态的属性,即使状态随后发生变化。
实施的伪代码:
class Connection{
private State _state;
}
abstract class State{
protected Connection connection;
}
class MySqlState extends State{}
class PostgreSqlState extends State {}