抽象工厂模式接口实现或类扩展

时间:2014-10-08 11:50:30

标签: java database design-patterns factory

我目前正在实现数据库连接的抽象工厂模式,我需要分离业务逻辑,并且需要为每个需要连接到我的应用程序的新数据库类型重写代码, 所以在这一点上我有这些类

Interface Connection{}
MySql implements Connection{}
PostgreSql implements Connection{}

所以这里的问题是每个实现接口Connection的类都必须重写接口中的方法,我需要一个类,其中有一些常规方法,如setStatement,executeQuery等,但是som方法需要是像connect方法一样被覆盖,这取决于数据库类型,

我的第一个想法是在接口Connection和子类之间有一个额外的类, 保留和使用方法的地方,如果没有被覆盖,但这个解决方案感觉不是正确的方法(纠正我,如果我错了)

Interface ConnectionInterface{}
class Connection{}
MySql extends Connection{}
PostgreSql extends Connection{}

由于

2 个答案:

答案 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 {}