簡體   English   中英

抽象工廠模式接口實現或類擴展

[英]Abstract factory pattern interface implementation or class extentsion

我目前正在實現用於數據庫連接的抽象工廠模式,我需要分離業務邏輯,並且不需要為需要連接到我的應用程序的每種新數據庫類型重寫代碼,因此,現在我有了這些類

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

所以這里的問題是,實現接口Connection的每個類都必須重寫接口中的方法,我將需要一個類,其中包含諸如setStatement,executeQuery等通用方法,但是som方法將需要像connect一樣被覆蓋取決於數據庫類型的方法,

我的第一個想法是在接口Connection和子類之間有一個額外的類,該類在不重寫的情況下可以保留和使用這些方法,但是這種解決方案感覺不像是正確的方法(如果我錯了,請糾正我)

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

謝謝

沒有錯。 但是我會這樣做:

interface Connection{}
abstract class AbstractConnection implements Connection {}
final class MySql extends AbstractConnection{}
final class PostgreSql extends AbstractConnection{}

使用Java 8,您還可以在接口中使用默認方法,而忽略抽象類。

完全替代的方法是提供方法的類DefaultConnectionOperations 然后,您可能會有一個此類的對象,該對象被注入每個Connection-Implementation中。 但是如果您的情況下需要依賴注入,這是有爭議的。

我不明白為什么不考慮繼承的狀態設計模式 這是一個非常好的帖子 -為什么?

通過這樣做

每個新的數據庫類型

類型更改時,可以更改Connection行為。 也將出現已經相應改變的情況。 狀態模式還允許您保留以前狀態的屬性,即使狀態隨后發生變化也是如此。

偽代碼的實現:

class Connection{
private State _state;
}

abstract  class State{
protected Connection connection;
}

class MySqlState extends State{}
class PostgreSqlState extends State {}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM