国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

設計模式系列之工廠模式

MrZONT / 3428人閱讀

摘要:設計模式之工廠模式工廠模式包括了簡單工廠工廠方法和抽象工廠。工廠方法模式下面我們針對普通工廠模式的缺點進行優化。

設計模式之工廠模式

工廠模式包括了簡單工廠、工廠方法和抽象工廠。下面我從java實際應用的角度分別介紹這三種模式。

簡單工廠模式

下面看下JDBC中獲取Connection的代碼

public class ConnectionFactory {
    public Connection createConnection(String dbType,String serverName,String dbName,String userName,String password) throws SQLException
    {
        if(dbType.equalsIgnoreCase("mysql"))
        {
            try 
            {
                Class.forName("com.mysql.cj.jdbc.Driver");
            } catch (ClassNotFoundException e) 
            {
                throw new RuntimeException(e);
            }
            String url = "jdbc:mysql://"+serverName+":3306/"+dbName
                    +"?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT";
            return DriverManager.getConnection(url,userName,password);
        }
        else if(dbType.equalsIgnoreCase("postgresql"))
        {
            try 
            {
                Class.forName("org.postgresql.Driver");
            } catch (ClassNotFoundException e) 
            {
                throw new RuntimeException(e);
            }
            String url = "jbdc:postgresql://"+serverName+":5432/"+dbName;
            return DriverManager.getConnection(url,userName,password);
        }
        else if(dbType.equalsIgnoreCase("MariaDB"))
        {
            try 
            {
                Class.forName("org.mariadb.jdbc.Driver");
            } catch (ClassNotFoundException e) 
            {
                throw new RuntimeException(e);
            }
            String url = "jdbc:mariadb://"+serverName+":3306/"+dbName;
            return DriverManager.getConnection(url,userName,password);
        }
        else
        {
            throw new IllegalArgumentException("未知的dbType參數類型");
        }
    }
}    

這段代碼中就使用了簡單工廠模式。我們傳入不同的參數類型,工廠內部就會創建不同的對象實例,我們根本不用管工廠內部的實現邏輯是什么。
缺點:違背設計原則:對擴展開放,對修改關閉。因為假如我業務需要新增一個數據庫Connection 獲取方式就得修改這部分的代碼。

工廠方法模式

下面我們針對普通工廠模式的缺點進行優化。
我們可以定義一個工廠方法接口IConnectionFactory ,包含一個方法,交給子類去實現各自的Connection創建方法

public interface IConnectionFactory {
    Connection create(String serverName,String dbName,String userName,String password) throws SQLException;
}

創建PostgreSqlConnectionFactory工廠并實現IConnectionFactory接口

public class PostgreSqlConnectionFactory implements IConnectionFactory {

    @Override
    public Connection create(String serverName, String dbName, String userName, String password) throws SQLException {
        try 
        {
            Class.forName("org.postgresql.Driver");
        } catch (ClassNotFoundException e) 
        {
            throw new RuntimeException(e);
        }
        String url = "jbdc:postgresql://"+serverName+":5432/"+dbName;
        return DriverManager.getConnection(url,userName,password);
    }

}

創建MySqlConnectionFactory 工廠并實現IConnectionFactory接口

public class MySqlConnectionFactory implements IConnectionFactory {

    @Override
    public Connection create(String serverName, String dbName, String userName, String password) throws SQLException {
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            throw new RuntimeException(e);
        }
        String url = "jdbc:mysql://" + serverName + ":3306/" + dbName
                + "?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT";
        return DriverManager.getConnection(url, userName, password);
    }

}

創建MariaDBConnectionFactory 工廠并實現IConnectionFactory接口

public class MariaDBConnectionFactory implements IConnectionFactory {

    @Override
    public Connection create(String serverName, String dbName, String userName, String password) throws SQLException {
        try 
        {
            Class.forName("org.mariadb.jdbc.Driver");
        } catch (ClassNotFoundException e) 
        {
            throw new RuntimeException(e);
        }
        String url = "jdbc:mariadb://"+serverName+":3306/"+dbName;
        return DriverManager.getConnection(url,userName,password);
    }

}

測試方法

Connection conn = new MySqlConnectionFactory().create("127.0.0.1", "test", "root", "root");

工廠方法模式的優點:新增一種類型,只需增加一個工廠,并實現抽象工廠即可。
缺點就是調用者需要知道調用的子類對象對應的子類工廠。

抽象工廠

上述的一個工廠對應一個產品,如果一個工廠對應多個產品那就是我們的抽象工廠模式了。比如 Connection 接口就是應用了抽象工廠模式。其中的方法都是工廠方法,比如:createStatement、prepareStatement、prepareCall等他們都有對應的實現類。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/75001.html

相關文章

  • 慕課網_《模式的秘密工廠模式》學習總結

    摘要:時間年月日星期日說明本文部分內容均來自慕課網。這對所有形態的工廠模式都是重要的這個系統的產品有至少一個的產品族同屬于一個產品族的產品是設計成在一起使用的。 時間:2017年08月27日星期日說明:本文部分內容均來自慕課網。@慕課網:http://www.imooc.com教學源碼:https://github.com/zccodere/s...學習源碼:https://github.c...

    jsyzchen 評論0 收藏0
  • 設計模式抽象工廠模式

    摘要:所謂的產品族,一般或多或少的都存在一定的關聯,抽象工廠模式就可以在類內部對產品族的關聯關系進行定義和描述,而不必專門引入一個新的類來進行管理。 0x01.定義與類型 定義:抽象工廠模式提供一個創建一系列相關或相互依賴對象的接口 無需指定它們具體的類 類型:創建型 UML showImg(https://segmentfault.com/img/bVbtBp1?w=800&h=862...

    Acceml 評論0 收藏0
  • php工廠模式

    摘要:工廠模式概念工廠模式是一種類,它具有為您創建對象的某些方法。使用該工廠的所有代碼會自動更改。 工廠模式概念 工廠模式是一種類,它具有為您創建對象的某些方法。您可以使用工廠類創建對象,而不直接使用 new。這樣,如果您想要更改所創建的對象類型,只需更改該工廠即可。使用該工廠的所有代碼會自動更改。 3中不同的工廠模式 1.簡單工廠模式(靜態工廠模式):通過靜態方法來創建對象2.工廠模式:定...

    tainzhi 評論0 收藏0
  • 工廠模式(一)抽象工廠模式

    摘要:主要詳解簡單工廠模式到抽象工廠模式的演變。抽象工廠模式當一個類別的產品還有多個系列區分時,為了按系列生產商品,使用抽象工廠區分。 主要詳解簡單工廠模式到抽象工廠模式的演變。 簡單工廠模式 即靜態工廠模式1.將對象的創建和使用分開;2.將生產過程集中,便于集中管理;3.當需要創建的對象類有變動時,就不用在所有new 的地方修改了,直接修改工廠類即可; /** * 簡單工廠模式 ---...

    woshicixide 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<