国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

聊聊設(shè)計(jì)模式--簡(jiǎn)單工廠模式

這篇具有很好參考價(jià)值的文章主要介紹了聊聊設(shè)計(jì)模式--簡(jiǎn)單工廠模式。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

簡(jiǎn)單工廠模式

? 前面也學(xué)了很多各種微服務(wù)架構(gòu)的組件,包括后續(xù)的服務(wù)部署、代碼管理、Docker等技術(shù),那么作為后端人員,最重要的任務(wù)還是代碼編寫能力,如何讓你的代碼寫的漂亮、易擴(kuò)展,讓別人一看賞心悅目,那么設(shè)計(jì)模式就是很重的了。那么本本篇文章就來(lái)聊聊一個(gè)簡(jiǎn)單的工廠模式。

緣起

? 一個(gè)22歲剛畢業(yè)的大學(xué)生A,計(jì)算機(jī)專業(yè)學(xué)的Java語(yǔ)言,到B公司面試。而面試題非常簡(jiǎn)單,實(shí)現(xiàn)一個(gè)簡(jiǎn)易計(jì)算器的功能,A覺(jué)得面試題很簡(jiǎn)單,三下五除二直接10分鐘完事兒了。然而交卷后,遲遲等不到B公司的通知,多半是涼了,那么他是怎么實(shí)現(xiàn)的呢?代碼如下:

public class Test {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("請(qǐng)輸入數(shù)字A:");
        String A = sc.nextLine();
        System.out.println("請(qǐng)選擇運(yùn)算符(+、-、*、/):");
        String B = sc.nextLine();
        System.out.println("請(qǐng)輸入數(shù)字B:");
        String C = sc.nextLine();
        double D = 0d;
        
        if (B.equals("+")) D = Double.parseDouble(A) + Double.parseDouble(C);
        if (B.equals("-")) D = Double.parseDouble(A) - Double.parseDouble(C);
        if (B.equals("*")) D = Double.parseDouble(A) * Double.parseDouble(C);
        if (B.equals("/")) D = Double.parseDouble(A) / Double.parseDouble(C);

        System.out.println("結(jié)果是:" + D);

    }
    
}

那么就以上的代碼,按功能來(lái)說(shuō),有問(wèn)題嗎?

沒(méi)問(wèn)題,功能確實(shí)實(shí)現(xiàn)了;但是細(xì)看就會(huì)發(fā)現(xiàn)代碼規(guī)范及其他的問(wèn)題:

  • 變量名命名問(wèn)題:ABCD?
  • if判斷問(wèn)題,假如輸入的是+號(hào),那么其他的判斷還有必要再去執(zhí)行嗎,沒(méi)必要
  • 輸入的不是數(shù)字時(shí)怎么處理

那么按照上面的問(wèn)題,依次去改動(dòng)代碼

public class Test {

    public static void main(String[] args) {
        try {
            Scanner sc = new Scanner(System.in);
            System.out.println("請(qǐng)輸入數(shù)字A:");
            double numberA = Double.parseDouble(sc.nextLine());
            System.out.println("請(qǐng)選擇運(yùn)算符(+、-、*、/):");
            String strOperate = sc.nextLine();
            System.out.println("請(qǐng)輸入數(shù)字B:");
            double numberB = Double.parseDouble(sc.nextLine());
            double result = 0d;
            switch (strOperate) {
                case "+":
                    result = numberA + numberB;
                    break;
                case "-":
                    result = numberA - numberB;
                    break;
                case "*":
                    result = numberA * numberB;
                    break;
                case "/":
                    result = numberA / numberB;
                    break;
            }
            System.out.println("結(jié)果是:" + result);
        } catch (Exception e) {
            System.out.println("您的輸入有誤:" + e.getMessage());
        }
    }

}

行了,代碼規(guī)范的問(wèn)題是都已經(jīng)完善了。

那么如何提高代碼的可維護(hù)、可擴(kuò)展、可復(fù)用、靈活性更好呢?

答案就是面向?qū)ο蟆?/p>

業(yè)務(wù)的封裝

準(zhǔn)確的說(shuō),就是讓業(yè)務(wù)邏輯和界面邏輯分開(kāi),讓它們之間的耦合度下降,只有分離開(kāi),才可以達(dá)到容易維護(hù)和擴(kuò)展。

增加一個(gè)運(yùn)算類

public class Operation {
    
    public static double getResult(double numberA, double numberB, String operate) {
        double result = 0d;
        switch (operate) {
            case "+":
                result = numberA + numberB;
                break;
            case "-":
                result = numberA - numberB;
                break;
            case "*":
                result = numberA * numberB;
                break;
            case "/":
                result = numberA / numberB;
                break;
        }
        return result;
    }
    
}

那么客戶端Test的代碼

public class Test {

    public static void main(String[] args) {
        try {
            Scanner sc = new Scanner(System.in);
            System.out.println("請(qǐng)輸入數(shù)字A:");
            double numberA = Double.parseDouble(sc.nextLine());
            System.out.println("請(qǐng)選擇運(yùn)算符(+、-、*、/):");
            String strOperate = sc.nextLine();
            System.out.println("請(qǐng)輸入數(shù)字B:");
            double numberB = Double.parseDouble(sc.nextLine());
            double result = Operation.getResult(numberA, numberB, strOperate);
            System.out.println("結(jié)果是:" + result);
        } catch (Exception e) {
            System.out.println("您的輸入有誤:" + e.getMessage());
        }
    }

}

業(yè)務(wù)邏輯和界面邏輯都分離開(kāi)了,那么這種方案就是面向?qū)ο蟮姆庋b,三大特性之一。

增加功能

計(jì)算器的功能發(fā)生改變了,不僅要支持+-*/,我還想要加一個(gè)平方根運(yùn)算,那我們就需要去修改Operation類中的代碼

public class Operation {

    public static double getResult(double numberA, double numberB, String operate) {
        double result = 0d;
        switch (operate) {
            case "+":
                result = numberA + numberB;
                break;
            case "-":
                result = numberA - numberB;
                break;
            case "*":
                result = numberA * numberB;
                break;
            case "/":
                result = numberA / numberB;
                break;
            case "pow":
                result = Math.pow(numberA, numberB);
                break;
        }
        return result;
    }
}

那么問(wèn)題來(lái)了,我這里是加了一個(gè)pow的case分支,加一個(gè)平方根運(yùn)算的功能,但是卻需要讓加減乘除的運(yùn)算全都得來(lái)參與編譯,萬(wàn)一一個(gè)不小心,把加法運(yùn)算改成減法了,又沒(méi)有注意到,直接給上生產(chǎn)環(huán)境了,這之后造成的問(wèn)題能承擔(dān)的了嗎?

那么我們?yōu)榱嗽黾庸δ?,而不讓其他已?jīng)存在的功能有代碼誤改的風(fēng)險(xiǎn)。繼續(xù)對(duì)業(yè)務(wù)方法進(jìn)行改進(jìn).

我們將Operation類置為抽象類,讓其他的加減乘除繼承它,并且每一個(gè)功能都是一個(gè)單獨(dú)的類實(shí)現(xiàn)自己的業(yè)務(wù)邏輯

public abstract class Operation {
    public double getResult(double numberA, double numberB) {
        return 0d;
    }
}

加減乘除類

public class Add extends Operation { // 加
    @Override
    public double getResult(double numberA, double numberB) {
        return numberA + numberB;
    }
}

public class Sub extends Operation { // 減
    @Override
    public double getResult(double numberA, double numberB) {
        return numberA - numberB;
    }
}

public class Mul extends Operation { // 乘
    @Override
    public double getResult(double numberA, double numberB) {
        return numberA * numberB;
    }
}

public class Div extends Operation { // 除
    @Override
    public double getResult(double numberA, double numberB) {
        if (numberB == 0) {
            System.out.println("除數(shù)不能為0");
            throw new RuntimeException();
        }
        return numberA / numberB;
    }
}

實(shí)現(xiàn)簡(jiǎn)單工廠

上面抽象出來(lái)一個(gè)操作類(Operation),并且有加減乘除的業(yè)務(wù)邏輯類,那么我如何得知,應(yīng)該用哪個(gè)業(yè)務(wù)邏輯類呢?

這時(shí)候,我們就需要一個(gè)工廠類,工廠顧名思義就是用來(lái)加工的,我把原料放進(jìn)去,工廠給我生產(chǎn)出來(lái)產(chǎn)品。

public class OperationFactory {  
    public static Operation createOperate(String operate) {
        Operation oper = null;
        switch (operate) {
            case "+":
                oper = new Add();
                break;
            case "-":
                oper = new Sub();
                break;
            case "*":
                oper = new Mul();
                break;
            case "/":
                oper = new Div();
                break;
        }
        return oper;
    }
}

客戶端這里調(diào)用時(shí)

public class Test {

    public static void main(String[] args) {
        try {
            Scanner sc = new Scanner(System.in);
            System.out.println("請(qǐng)輸入數(shù)字A:");
            double numberA = Double.parseDouble(sc.nextLine());
            System.out.println("請(qǐng)選擇運(yùn)算符(+、-、*、/):");
            String strOperate = sc.nextLine();
            System.out.println("請(qǐng)輸入數(shù)字B:");
            double numberB = Double.parseDouble(sc.nextLine());
            Operation operate = OperationFactory.createOperate(strOperate);
            double result = operate.getResult(numberA, numberB);
            System.out.println("結(jié)果是:" + result);
        } catch (Exception e) {
            System.out.println("您的輸入有誤:" + e.getMessage());
        }
    }

}

聊聊設(shè)計(jì)模式--簡(jiǎn)單工廠模式,Java,設(shè)計(jì)模式,設(shè)計(jì)模式,簡(jiǎn)單工廠模式,java

上面就是大致的結(jié)構(gòu)圖,當(dāng)我們?cè)俅卧黾有碌墓δ軙r(shí),只需要去集成Operation運(yùn)算類,然后實(shí)現(xiàn)自己的業(yè)務(wù)邏輯就可以了,看起來(lái)是不是比原先的一坨代碼更加一目了然了,并且也提高了它的復(fù)用性、維護(hù)性、擴(kuò)展性,也更加靈活了。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-722729.html

到了這里,關(guān)于聊聊設(shè)計(jì)模式--簡(jiǎn)單工廠模式的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Java設(shè)計(jì)模式——工廠模式

    Java設(shè)計(jì)模式——工廠模式

    目錄 設(shè)計(jì)模式系列文章 前言 一、簡(jiǎn)單工廠模式 二、工廠方法模式 三、抽象工廠模式 總結(jié) 最近在學(xué)習(xí)一些Java設(shè)計(jì)模式的概念,設(shè)計(jì)模式誕生的目的,我認(rèn)為是可以使得寫出的代碼具有更好的邏輯性,減少了大量冗余代碼來(lái)進(jìn)行重復(fù)而繁瑣的操作,也更好的提升了復(fù)用性。

    2023年04月13日
    瀏覽(24)
  • JAVA設(shè)計(jì)模式—工廠模式

    工廠模式是一種創(chuàng)建型設(shè)計(jì)模式,它提供了一種創(chuàng)建對(duì)象的接口,但是由子類決定要實(shí)例化的類是哪一個(gè)。工廠模式使得一個(gè)類的實(shí)例化延遲到其子類。 用代碼進(jìn)行舉例演示 假設(shè)我們有一個(gè)產(chǎn)品接口 Product 和兩個(gè)具體產(chǎn)品類 ConcreteProductA 和 ConcreteProductB ,以及一個(gè)工廠接口

    2024年01月24日
    瀏覽(30)
  • Java設(shè)計(jì)模式-抽象工廠模式

    設(shè)計(jì)模式是軟件設(shè)計(jì)中的一種常見(jiàn)方法,通過(guò)定義一系列通用的解決方案,來(lái)解決常見(jiàn)的軟件設(shè)計(jì)問(wèn)題。其中,抽象工廠模式是一種非常常見(jiàn)的設(shè)計(jì)模式,它可以幫助我們創(chuàng)建一組相關(guān)的對(duì)象,而不需要指定具體的實(shí)現(xiàn)方式。 抽象工廠模式是一種創(chuàng)建型設(shè)計(jì)模式,它提供了一

    2024年02月01日
    瀏覽(24)
  • Java設(shè)計(jì)模式 (二) 工廠模式

    什么是工廠模式? 工廠模式是一種創(chuàng)建型設(shè)計(jì)模式,它提供了一種統(tǒng)一的方式來(lái)創(chuàng)建對(duì)象,隱藏了對(duì)象的創(chuàng)建細(xì)節(jié),使客戶端代碼與具體類的實(shí)例化過(guò)程解耦。工廠模式可以幫助您在不暴露對(duì)象創(chuàng)建細(xì)節(jié)的情況下實(shí)例化對(duì)象,從而提高代碼的靈活性和可維護(hù)性。 工廠模式通常

    2024年02月12日
    瀏覽(22)
  • java設(shè)計(jì)模式-工廠方法模式

    java設(shè)計(jì)模式-工廠方法模式

    定義一個(gè)創(chuàng)建產(chǎn)品對(duì)象的工廠接口,將產(chǎn)品對(duì)象的實(shí)際創(chuàng)建工作推遲到具體子工廠類當(dāng)中。這滿足創(chuàng)建型模式中所要求的“創(chuàng)建與使用相分離”的特點(diǎn)。 用戶只需要知道具體工廠的名稱就可得到所要的產(chǎn)品,無(wú)須知道產(chǎn)品的具體創(chuàng)建過(guò)程; 在系統(tǒng)增加新的產(chǎn)品時(shí)只需要添加

    2024年02月04日
    瀏覽(29)
  • java設(shè)計(jì)模式【工廠方法模式】

    java設(shè)計(jì)模式【工廠方法模式】

    工廠方法模式 ( FACTORY METHOD )是一種常用的類創(chuàng)建型設(shè)計(jì)模式,此模式的核心精神是封裝類中變化的部分,提取其中個(gè)性化善變的部分為獨(dú)立類,通過(guò)依賴注入以達(dá)到解耦、復(fù)用和方便后期維護(hù)拓展的目的。它的核心結(jié)構(gòu)有四個(gè)角色,分別是抽象工廠;具體工廠;抽象產(chǎn)品;

    2024年02月05日
    瀏覽(30)
  • java設(shè)計(jì)模式【抽象工廠模式】

    java設(shè)計(jì)模式【抽象工廠模式】

    抽象工廠模式 是對(duì)簡(jiǎn)單工廠模式的一個(gè)變種,它允許通過(guò)一個(gè)統(tǒng)一的接口來(lái)創(chuàng)建不同的產(chǎn)品實(shí)例,而無(wú)需指定具體的子類。在這個(gè)模式中,我們只關(guān)心產(chǎn)品的抽象接口,而將具體的產(chǎn)品實(shí)現(xiàn)留給子類去實(shí)現(xiàn)。這樣,我們可以通過(guò)創(chuàng)建不同的工廠對(duì)象來(lái)創(chuàng)建不同的產(chǎn)品實(shí)例,而

    2024年02月05日
    瀏覽(31)
  • Java工廠設(shè)計(jì)模式

    工廠設(shè)計(jì)模式是一種創(chuàng)建型設(shè)計(jì)模式,它允許你創(chuàng)建對(duì)象,但不暴露其創(chuàng)建邏輯。該模式定義了一個(gè)工廠類,該類負(fù)責(zé)創(chuàng)建對(duì)象。這樣,客戶端代碼只需知道如何與工廠交互,而不必知道對(duì)象的實(shí)際創(chuàng)建方式。 下面是工廠設(shè)計(jì)模式的通用結(jié)構(gòu):

    2024年02月07日
    瀏覽(19)
  • Java設(shè)計(jì)模式---單例 工廠 代理模式

    單例模式是設(shè)計(jì)模式中的一種,屬于創(chuàng)建型模式。在軟件工程中,單例模式確保一個(gè)類只有一個(gè)實(shí)例,并提供一個(gè)全局訪問(wèn)點(diǎn)。這種模式常用于那些需要頻繁實(shí)例化然后引用,且創(chuàng)建新實(shí)例的開(kāi)銷較大的類,例如數(shù)據(jù)庫(kù)連接池、緩存管理等。 意圖 :保證一個(gè)類僅有一個(gè)實(shí)例

    2024年01月24日
    瀏覽(28)
  • Java工廠方法設(shè)計(jì)模式

    工廠方法模式是 Java 中常用的一種創(chuàng)建型設(shè)計(jì)模式,它通過(guò)定義一個(gè)抽象的工廠接口來(lái)創(chuàng)建對(duì)象,從而將對(duì)象的創(chuàng)建與具體業(yè)務(wù)邏輯分離開(kāi)來(lái),提高了代碼的可維護(hù)性和可讀性。 抽象工廠:定義了創(chuàng)建產(chǎn)品對(duì)象的接口。 具體工廠:實(shí)現(xiàn)了抽象工廠中定義的接口,負(fù)責(zé)創(chuàng)建具

    2024年02月13日
    瀏覽(36)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包