設(shè)計(jì)模式學(xué)習(xí)筆記:02簡(jiǎn)單 工廠模式

由一個(gè)工廠對(duì)象決定創(chuàng)建出哪一種產(chǎn)品類(lèi)的實(shí)例,屬于創(chuàng)建型模式。

定義發(fā)送接口

public interface Sender {
     public void Send(); 
}

以及實(shí)現(xiàn)的兩個(gè)發(fā)送短信 和發(fā)送郵件

public class MailSender implements Sender {
@Override
    public void Send() {
        System.out.println("this is mail  sender!");
    }
}

發(fā)送短信

public class SmsSender implements Sender {
@Override
    public void Send() {
        System.out.println("this is sms sender!");
    }
}

建造工廠, 一般寫(xiě)法:

public class NormalFactory {
    public Sender produce(String type) {
        if ("mail".equals(type)) {
            return new MailSender();
        } else if ("sms".equals(type)) {
            return new SmsSender();
        } else {
            System.out.println("請(qǐng)輸入正確的類(lèi)型!");
            return null;
        }
    }
}

在測(cè)試入口測(cè)試

public class FactoryTest {
public static void main(String[] args) {
    normalFactory();
//  multiFactory();
//  staticFactory();
    }

// 一般寫(xiě)法
private static void normalFactory() {
    NormalFactory factory = new NormalFactory();
    Sender sender = factory.produce("sms");
    sender.Send();
    }

// 多個(gè)工廠方法模式
private static void multiFactory() {
    MultiFactory factory = new MultiFactory();
    Sender sender = factory.produceMail();
    sender.Send();
    }

// 靜態(tài) 工廠
private static void staticFactory() {
    Sender sender = StaticFactory.produceMail();
    sender.Send();
    }
}

當(dāng)然,產(chǎn)品多了這樣寫(xiě)沒(méi)效率,使用 多個(gè)工廠方法模式

public class MultiFactory {
public Sender produceMail() {
    return new MailSender();
    }

public Sender produceSms() {
    return new SmsSender();
    }
}

或者 使用 靜態(tài)方式

 public class StaticFactory {
        public static Sender produceMail() {
            return new MailSender();
            }

            public static Sender produceSms() {
            return new SmsSender();
        }
}

調(diào)用方法在測(cè)試類(lèi),使用場(chǎng)景的理解:
比如不同模塊對(duì)網(wǎng)絡(luò)請(qǐng)求,可以把 使用靜態(tài)方式創(chuàng)造不同模塊的 網(wǎng)絡(luò)請(qǐng)求實(shí)現(xiàn) 。工廠類(lèi)始終返回的是這個(gè)抽象類(lèi),這樣如果對(duì)原有功能進(jìn)行更改或是新添加新的功能,也不會(huì)對(duì)原來(lái)的其他類(lèi)做修改。

最后編輯于
?著作權(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)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,544評(píng)論 19 139
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,954評(píng)論 25 709
  • 設(shè)計(jì)模式基本原則 開(kāi)放-封閉原則(OCP),是說(shuō)軟件實(shí)體(類(lèi)、模塊、函數(shù)等等)應(yīng)該可以拓展,但是不可修改。開(kāi)-閉原...
    西山薄涼閱讀 4,080評(píng)論 3 14
  • 前言 歷經(jīng)兩個(gè)月,我終于完成了第一個(gè)C端項(xiàng)目全民星跑,整個(gè)工程總共8萬(wàn)行代碼(包含注釋行).作為強(qiáng)迫癥的我把這個(gè)項(xiàng)...
    神經(jīng)騷棟閱讀 2,785評(píng)論 15 53
  • 在今天之前,從沒(méi)有哪一天讓我對(duì)冬至節(jié)的認(rèn)識(shí)有如此深刻。 一早第一次打開(kāi)手機(jī)時(shí),撲面而來(lái)的是這樣一條微信:“冬至是2...
    王小唐閱讀 242評(píng)論 3 4

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