工廠三兄弟22

1.簡(jiǎn)單工廠模式

基本流程:
首先將需要?jiǎng)?chuàng)建的各種不同對(duì)象的相關(guān)代碼封裝到不同的類中,這些類稱之為具體產(chǎn)品類,而將他們公共的代碼進(jìn)行抽象和提取后封裝在一個(gè)抽象產(chǎn)品類中,每一個(gè)具體產(chǎn)品類都是抽象產(chǎn)品類的子類;然后提供一個(gè)工廠類用于創(chuàng)建各種產(chǎn)品,在工廠類中提供一個(gè)創(chuàng)建產(chǎn)品的工廠方法,該方法可以根據(jù)所傳入的參數(shù)不同創(chuàng)建不同的具體產(chǎn)品對(duì)象;客戶端只需要調(diào)用工廠類的工廠方法并傳入響應(yīng)的參數(shù)即可得到一個(gè)產(chǎn)品對(duì)象。

簡(jiǎn)單工廠模式:定義一個(gè)工廠類,它可以根據(jù)參數(shù)的不同返回不同類的實(shí)例,被創(chuàng)建的實(shí)例通常都具有共同的父類。因?yàn)樵诤?jiǎn)單工廠模式中用于創(chuàng)建實(shí)例的方法是靜態(tài)方法,因此簡(jiǎn)單工廠模式又被稱之為靜態(tài)工廠方法模式,它屬于類創(chuàng)建型模式

abstract class Product {  
    //所有產(chǎn)品類的公共業(yè)務(wù)方法  
    public void methodSame() {  
        //公共方法的實(shí)現(xiàn)  
    }  
  
    //聲明抽象業(yè)務(wù)方法  
    public abstract void methodDiff();  
}  

class ConcreteProductA extends Product {  
    //實(shí)現(xiàn)業(yè)務(wù)方法  
    public void methodDiff() {  
        //業(yè)務(wù)方法的實(shí)現(xiàn)  
    }  
}  

class ConcreteProductB extends Product {  
    //實(shí)現(xiàn)業(yè)務(wù)方法  
    public void methodDiff() {  
        //業(yè)務(wù)方法的實(shí)現(xiàn)  
    }  
}  
class Factory {  
    //靜態(tài)工廠方法  
    public static Product getProduct(String arg) {  
        Product product = null;  
        if (arg.equalsIgnoreCase("A")) {  
            product = new ConcreteProductA();  
            //初始化設(shè)置product  
        }  
        else if (arg.equalsIgnoreCase("B")) {  
            product = new ConcreteProductB();  
            //初始化設(shè)置product  
        }  
        return product;  
    }  
}  
class Client {  
   public static void main(String args[]) {  
       Product product;   
       product = Factory.getProduct("A"); //通過工廠類創(chuàng)建產(chǎn)品對(duì)象  
       product.methodSame();  
       product.methodDiff();  
   }  
}  

2.工廠方法模式

工廠方法模式:定義一個(gè)用于創(chuàng)建對(duì)象的接口,讓子類決定將哪一個(gè)類實(shí)例化。工廠方法模式讓一個(gè)類的實(shí)例化延遲到其子類。工廠方法模式又簡(jiǎn)稱為工廠模式,又可稱作虛擬構(gòu)造器模式或多態(tài)工廠模式。工廠方法模式是一種類創(chuàng)建型模式

image.png
//日志記錄器接口:抽象產(chǎn)品  
interface Logger {  
 public void writeLog();  
}  

//數(shù)據(jù)庫(kù)日志記錄器:具體產(chǎn)品  
class DatabaseLogger implements Logger {  
 public void writeLog() {  
     System.out.println("數(shù)據(jù)庫(kù)日志記錄。");  
 }  
}  

//文件日志記錄器:具體產(chǎn)品  
class FileLogger implements Logger {  
 public void writeLog() {  
     System.out.println("文件日志記錄。");  
 }  
}  

//日志記錄器工廠接口:抽象工廠  
interface LoggerFactory {  
 public Logger createLogger();  
}  

//數(shù)據(jù)庫(kù)日志記錄器工廠類:具體工廠  
class DatabaseLoggerFactory implements LoggerFactory {  
 public Logger createLogger() {  
         //連接數(shù)據(jù)庫(kù),代碼省略  
         //創(chuàng)建數(shù)據(jù)庫(kù)日志記錄器對(duì)象  
         Logger logger = new DatabaseLogger();   
         //初始化數(shù)據(jù)庫(kù)日志記錄器,代碼省略  
         return logger;  
 }     
}  

//文件日志記錄器工廠類:具體工廠  
class FileLoggerFactory implements LoggerFactory {  
 public Logger createLogger() {  
         //創(chuàng)建文件日志記錄器對(duì)象  
         Logger logger = new FileLogger();   
         //創(chuàng)建文件,代碼省略  
         return logger;  
 }     
}  

編寫相關(guān)測(cè)試代碼

class Client {  
    public static void main(String args[]) {  
        LoggerFactory factory;  
        Logger logger;  
        factory = new FileLoggerFactory(); //可引入配置文件實(shí)現(xiàn)  
        logger = factory.createLogger();  
        logger.writeLog();  
    }  
}  

3.抽象工廠模式

抽象工廠模式:提供一個(gè)創(chuàng)建一系列相關(guān)或相互依賴對(duì)象的接口,而無須指定它們具體的類。抽象工廠模式又稱為Kit模式,它是一種對(duì)象創(chuàng)建型模式。

image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 設(shè)計(jì)模式匯總 一、基礎(chǔ)知識(shí) 1. 設(shè)計(jì)模式概述 定義:設(shè)計(jì)模式(Design Pattern)是一套被反復(fù)使用、多...
    MinoyJet閱讀 4,096評(píng)論 1 15
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類相關(guān)的語(yǔ)法,內(nèi)部類的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚_t_閱讀 34,854評(píng)論 18 399
  • 該文章屬于劉小壯原創(chuàng),轉(zhuǎn)載請(qǐng)注明:劉小壯[http://m.itdecent.cn/u/2de707c93d...
    劉小壯閱讀 13,052評(píng)論 29 59
  • 1 場(chǎng)景問題# 1.1 導(dǎo)出數(shù)據(jù)的應(yīng)用框架## 考慮這樣一個(gè)實(shí)際應(yīng)用:實(shí)現(xiàn)一個(gè)導(dǎo)出數(shù)據(jù)的應(yīng)用框架,來讓客戶選擇數(shù)據(jù)...
    七寸知架構(gòu)閱讀 7,023評(píng)論 6 75
  • 何以拒之,何以散之。 流光難轉(zhuǎn),命運(yùn)難輪。 我只等待,花開綻放。 亦似水波,波光柔情。 片片的雪花在空中輪回,我的...
    JmYs閱讀 538評(píng)論 1 1

友情鏈接更多精彩內(nèi)容