設計模式開篇——工廠模式

 

做者:haibiscuitgit

 

時間:2019:3:13github

 

您的star是我不斷前行的動力數據庫

 

https://github.com/haibiscuit設計模式

 

轉載請說明出處服務器

 

 

前言:框架

1.能夠先參考我寫的設計原則,總的來講最重要的是要以單一職責和抽象和接口來設計本身的類,ide

    其中單一原則(應該僅有一個引發它變化的緣由),以及模式設計的可擴展性尤其重要。測試

2.爲了達到開閉原則,能夠將要使用的類的路徑配置在xml,利用反射獲取類的實例,另外須要配置的類在每一個模式中只須要配置一種,ui

例如:spa

    工廠模式:只須要配置工廠的實現類,目標類(即工廠建立的類在工廠的是喜好呢類中建立)

 

    適配器模式:只須要配置適配器類,適配者在適配器類中建立,由適配器來操做

另外,設計模式是爲了創建不一樣類型的類之間的關係

例如:

   工廠模式的工廠類和目標生成類(這裏工廠模式有接口)

   適配器模式的適配者類和適配器類(這裏適配器類也有接口)

因此,上面的設計模式總結的思路很值得在實際的代碼設計中使用

 

目錄:

 

    建立型:(重點推薦工廠模式和單例模式)

    1.工廠模式

    2.抽象工廠模式

    3.單例模式

 

    結構性:(重點推薦適配器模式和代理模式)

    1.適配器模式

    2.外觀模式

    3.代理模式

 

    行爲型:(重點推薦策略模式和觀察者模式)

    1.命令模式

    2.迭代器模式

    3.策略模式

    4.觀察者模式

 

 

 

 

 

 

 

 

:工廠模式

    定義:定義一個用於建立對象的接口,可是讓子類決定將哪個類實例化。工廠方法模式讓一個子類的實例化延遲到其子類。

 

    使用場景:1、日誌記錄器:記錄可能記錄到本地硬盤、系統事件、遠程服務器等,用戶能夠選擇記錄日誌到什麼地方。 2、數據庫訪問,當用戶不知道最後系統採用哪一類數據庫,以及數據庫可能有變化時。 3、設計一個鏈接服務器的框架,須要三個協議,"POP3""IMAP""HTTP",能夠把這三個做爲產品類,共同實現一個接口。

 

    示例:

        1.拿日誌記錄器來舉例

        //建立的目標類

        interface  Logger{

            void writeLog();

        }

        class DatabaseLogger implements Logger{

            @Override

            public void writeLog() {

               System.out.println("數據庫日誌記錄類");

            }

        }

        class FileLogger implements Logger{

            @Override

            public void writeLog() {

               System.out.println("文件日誌記錄類");

            }

        }

 

        //定義工廠類

        interface  LoggerFactory{

            Logger createLogger();

        }

        class DatabaseLoggerFactory implements LoggerFactory{

            @Override

            public Logger createLogger() {

                //建立數據庫日誌記錄器類

                Logger logger = new DatabaseLogger();

                return logger;

            }

        }

        class FileLoggerFactory implements LoggerFactory{

            @Override

            public Logger createLogger() {

                //建立數據庫日誌記錄器類

                Logger logger = new FileLogger();

                return logger;

            }

        }

 

        //測試類

        class  Test{

            public static void main(String []args){

                LoggerFactory factory;

                Logger logger;

                

                factory = new FileLoggerFactory();   //可引入配置文件實現(原理:從配置文件中獲取類的路徑,再經過反射類建立工廠類,爲了實現開閉原則,能夠在個人適配器模式中看到思路)

                logger = factory.createLogger();

 

                logger.writeLog();

            }

        }

    總結:

        1.每次增長一個產品時,都須要增長一個具體類和對象實現工廠,使得系統中類的個數成倍增長,在必定程度上增長了系統的複雜度,同時也增長了系統具體類的依賴。這並非什麼好事。

相關文章
相關標籤/搜索