1. 程式人生 > >設計模式系列之一:簡單工廠模式

設計模式系列之一:簡單工廠模式

前言

設計模式能夠幫助我們設計出健壯,低耦合性的程式碼,從此和高耦合的程式碼say goodbye!在所有的的設計模式中,簡單工廠算是我們平時接觸比較多的吧,多執行緒中的消費者工廠類與生產者工廠類應該算是接觸最早的設計模式,簡單工廠模式要解決的首要問題就是降低程式之間的耦合度,通過Java中的封裝、繼承與多型實現解耦。通過使用簡單工廠模式,我們設計的程式碼更易於維護和複用

問題背景

在進入正題之前我們先看一下問題背景:

某公司開發了一個A軟體,資料庫使用的是SQLServer。後由於客戶要求需要使用Oracle資料庫,原來的資料要遷移到Oracle中,在遷移的過程中遇到很多問題,比如語法錯誤,關鍵字濫用,函式不支援等問題。請設計一組程式,實現資料的無縫遷移。

不使用任何模式

原始資料庫訪問方式

為了簡單起見,我們先寫一組訪問使用者資訊的資料庫訪問程式,使用者有id和name屬性,實現使用者資訊的查詢(根據id)與新增功能

這裡只是模擬程式的執行過程,並不真正從資料庫中獲取使用者資訊

    public class User {
        private int id;
        private String name;
        //省略setter與getter方法public class SqlServerUser {
        //新增使用者的方法
        public
void insertUser(User user){ System.out.println("使用SQLServer新增使用者"); } //查詢使用者資訊的方法 public User findUserById(int id){ System.out.println("使用SQLServer通過id找到使用者"); return null; } } public class OracleUser { //方法與上面一樣,就是把SqlServer改成Oracle
} public class Test{ public static void main(String[] args) { User user = new User(); SqlServerUser su = new SqlServerUser(); su.insertUser(user); su.findUserById(1); OracleUser ou = new OracleUser(); ou.insertUser(user); ou.findUserById(1); } }

這裡由於直接在客戶端建立的SqlServer物件,客戶一旦使用其他資料庫就意味著原來的su物件是無效的,全部都得重來。當資料量龐大的時候,無疑會帶來巨大工作量,如果能夠在客戶端根據使用者選擇的資料庫物件靈活建立相應的資料庫,無疑會減少很多工作量。

使用簡單工廠模式

使用簡單工廠的大致思路是:根據使用者選擇的資料庫型別,建立相應的資料庫物件,在客戶端只要傳入這個引數,具體生產物件的過程由工廠去實現。

    //資料庫物件的抽象類
    public abstract class DBObject {
        //新增使用者的方法
        public abstract void insertUser(User user);
        //查詢使用者資訊的方法
        public abstract User findUserById(int id);
    }
    //Oracle資料庫物件的實現類
    public class OracleObject extends DBObject{
        @Override
        public void insertUser(User user) {
            System.out.println("使用Oracle新增使用者");
        }
        @Override
        public User findUserById(int id) {
            System.out.println("使用Oracle通過id找到使用者");
            return null;
        }
    }
    //SqlServer資料庫物件的實現類
    public class SqlServerObejct extends DBObject{
        @Override
        public void insertUser(User user) {
            System.out.println("使用SQLServer新增使用者");
        }
        @Override
        public User findUserById(int id) {
            System.out.println("使用SQLServer通過id找到使用者");
            return null;
        }
    }
    //工廠
    public class DBFactory {
        public static DBObject createDBObject(String dbType){
            switch (dbType){
                case "oracle":
                    return new OracleObject();
                case "sqlserver":
                    return new SqlServerObejct();
            }
            return null;
        }
    }
    //測試方法
    public static void main(String[] args) {
        DBObject db = DBFactory.createDBObject("oracle");
        db.insertUser(new User());
        db.findUserById(1);
    }

最後的測試結果:

請輸入你要建立的資料庫型別:
oracle
使用Oracle新增使用者
使用Oracle通過id找到使用者

這裡通過封裝,把建立例項的過程交給工廠去完成,客戶端只需要確定選擇的資料庫型別,DBFactory就會生成一個數據庫例項,使用者拿著這個例項就可以進行資料庫的操作了。通過這種方式,客戶端的操作與具體的資料庫建立就已經解耦了。

簡單工廠模式小結

總結簡單工廠模式,有以下好處:
* 可以根據客戶端的選擇動態建立相應的例項,消除了對具體產品的依賴
* 是Java封裝、繼承和多型的運用,體現了OOP的程式設計思想

相關推薦

設計模式系列之一簡單工廠模式

前言 設計模式能夠幫助我們設計出健壯,低耦合性的程式碼,從此和高耦合的程式碼say goodbye!在所有的的設計模式中,簡單工廠算是我們平時接觸比較多的吧,多執行緒中的消費者工廠類與生產者工廠類應該算是接觸最早的設計模式,簡單工廠模式要解決的首要問題就是降低

設計模式之一簡單工廠模式

package com.xjh.demo.designpattern.pattern1; public abstract class Animal { public abstract void eat(); } package com.xjh.demo.de

設計模式之一簡單工廠模式,用python實現簡易計算器

最近自學Python,想做些小專案練練手,發現程傑寫的大話設計模式這書不錯,適合新手入門。開始這本書第一章學習,這裡實現簡單工廠模式。以實現圖形介面的簡易計算器為例項,能夠計算+-/*% ( )等混合表示式,ps: 沒有實現負數的功能。具體過程大致分為以下幾個步

設計模式筆記1簡單工廠模式

1.3 簡單 修改 作用 面向對象 對象 面向 tro 計算   如果想成為一名更優秀的軟件設計師,了解優秀軟件設計的演變過程比學習優秀設計本身更有價值。 1.1 面向對象的好處   通過封裝、繼承多態把程序的耦合度降低,使用設計模式使得程序更加靈活,容易修改,易於復用

PHP設計模式系列簡單工廠模式

簡單工廠模式 簡單工廠模式是屬於建立型模式,又叫做靜態工廠方法(Static Factory Method)模式,但不屬於23種GOF設計模式之一。簡單工廠模式是由一個工廠物件決定創建出哪一種產品類的例項。簡單工廠模式是工廠模式家族中最簡單實用的模式,可以理解

初識設計模式1簡單工廠模式

簡單工廠 height 判斷 目前 mes strong 產品 return logs 簡單工廠模式 簡單工廠模式是類的創建模式,又叫做靜態工廠方法模式。簡單工廠模式由一個工廠對象決定生產出哪一種產品類的實例。 為什麽要使用簡單工廠模式 原因很簡單:解耦。 LOL場

C#設計模式之創建類模式簡單工廠模式

div main bst http fin 想要 對象 sqlserver 關鍵字 這是記錄設計模式種的創建型模式的第一篇,所以,在開頭要說一些關於創建型模式的含義和意義。 創建型模式 軟件系統在運行時,類將被實例化成對象,並由這些被創建的對象協作完成系統中要求的各項業務功

設計模式筆記簡單工廠模式 -- 創建型

-- 一個 筆記 簡單 靜態 com 工廠模式 不同 static 簡單工廠模式 定義一個工廠類,可以根據輸入的不同返回不同類的實例。被創建的類通常有共同的父類。因為通常創建實例的方法都是static,所以又被稱為靜態工廠模式 代碼樣例 設計模式筆記:簡單

Java 設計模式(一)簡單工廠模式

參考連結:簡單工廠模式-Simple Factory Pattern 1. 模式概述 定義:定義一個工廠類,它可以根據引數的不同返回不同類的例項,被建立的例項通常都具有共同的父類。因為在簡單工廠模式中用於建立例項的方法是靜態方法,因此簡單工廠模式又被稱為靜態工廠方法模式。 簡

大話設計模式簡單工廠模式

    由於面向過程程式設計造成的程式碼膨脹問題越來越嚴重,使其維護的代價高,靈活性很低。為了使程式碼易維護、易擴充套件、易複用和靈活性好,所以我們在採用面向物件程式設計的時候,防止採用面向物件的語言實際上卻做著面向過程的事兒,更需要採用某種設計模式,核心就是使程式變得高內

c++設計模式簡單工廠模式(Simple Factory Pattern)

 定義: 從設計模式的型別上來說,簡單工廠模式是屬於建立型模式,又叫做靜態工廠方法(StaticFactory Method)模式,但不屬於23種GOF設計模式之一。簡單工廠模式是由一個工廠物件決定創建出哪一種產品類的例項。簡單工廠模式是工廠模式家族中最簡單實用的模式,

設計模式簡單工廠模式

簡單工廠模式又叫做靜態工廠方法模式,不屬於23種設計模式中的一種。 簡單工廠模式是工廠模式家族中最簡單的一種。 簡單工廠模式具有以下優點: 讓外界可以從直接建立具體物件的尷尬局面解脫出來,僅僅負責“消費”物件就可以了 外界不必管這些物件究竟如何建立及組織

大話設計模式簡單工廠模式

一.模式定義 簡單工廠模式也稱為靜態工廠模式。屬於類建立型設計模式。實質是一個“”工廠系統“”可以產生出多種不同的”產品物件”,使用者不需要知道“”產品物件“”是怎麼產生的,只需要知道關於該“產品物件”的關鍵引數,將該引數傳給“工廠系統”就可以由工廠系統生產出對應的產品。

Java描述設計模式(02)簡單工廠模式

一、生活場景簡介 1、引入場景 訂餐流程簡單描述 1)、食品抽象類,規定食品的基礎屬性操作 2)、魚類,雞肉類食品類擴充套件 3)

設計模式(四)簡單工廠模式

spa 電腦 tco null 繼承 string 我們 實例 tro 相關文章 設計模式(一)設計六大原則 設計模式(二)單例模式的七種寫法 設計模式(三)建造者模式 1.簡單工廠模式簡單介紹 定義 簡單工廠模式屬於創建型模式又叫做靜

簡單工廠模式

returns 原則 分離 問題 簡單的 編號 tor 在一起 分享 設計模式分類:  創建型模式。  結構型模式。  行為模式。   23種設計模式,如何記。面向對象的系統中有很多對象,創建型模式解決的問題就是如何創建對象,何時創建對象,它努力的讓代碼不要太多的關註對象的

設計模式(2)----簡單工廠模式

只知道 wid lin 通過 trac 復雜 創建 調用 lvs 說明一下: 簡單工廠模式不屬於23種GOF設計模式之一,我之所以寫出來,是應為簡單工廠模式是工廠模式的基礎,23種中的工廠方法模式是從中衍生的。 簡介: 簡單工廠模式是屬於創建型模式,又叫做靜態工廠方法(St

js設計模式第三章 簡單工廠模式 讀書筆記

簡單工廠模式又叫靜態工廠方法,由一個工廠物件決定建立某一種產品物件類的例項。主要用來建立同一類的物件。 比如提示彈窗類 function createPop(type,text){ //建立一個物件,並對物件拓展屬性和方法 var o = new Object();

常用的軟體設計模式(二)簡單工廠模式

剛參加工作的時候,絲毫沒有面向物件的思想,所有分支都使用一堆的if...else...,現在回頭看以前的程式碼,著實low。但是隻要一心想著進步的人,一定是會總結和反省的,為什麼以前的程式碼出現bug這麼難維護,功能擴充套件那麼難,程式碼難得到複用,過了段時間連自己寫的程式碼都不知道什麼意思。都說女

設計模式(二)簡單工廠模式

簡單工廠模式: 用一個單獨的類來做創造例項的過程。例如加減乘除運算,可以將這些類抽象成一個基類,然後繼承,實現自己的功能,如果有其他的類要建立,只需要新建一個類,在創造例項的類中加一種情況。 類圖: 選自《大話設計模式》 public abstract class Operati