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

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

簡(jiǎn)單工廠模式(邏輯判斷)

對(duì)實(shí)現(xiàn)同一個(gè)接口的類,我們可以使用一個(gè)工廠類來(lái)封裝這些類的創(chuàng)建,通過(guò)傳入一個(gè)類的標(biāo)識(shí)來(lái)獲得該類的示例(邏輯判斷)。這種設(shè)計(jì)模式我們稱作簡(jiǎn)單工廠設(shè)計(jì)模式。
下面用UML圖來(lái)表示該設(shè)計(jì)模式下類與類之間的關(guān)系


示例代碼

package factory;

public class SimpleFactoryMethodTest
{
    public static void main(String[] args)
    {
        SimpleFactory factory = new SimpleFactory();
        Sender s1 = factory.createSender("email");
        s1.send();
        Sender s2 = factory.createeSender("sms");
        s2.send();
    }
}

class SimpleFactory
{
    public Sender createSender(String name)
    {
        if ("email".equals(name))
        {
            return new EmailSender();
        }
        else if ("sms".equals(name))
        {
            return new SMSSender();
        }
        else
        {
            System.out.println(name + " not found!");
            return null;
        }
    }
}

interface Sender
{
    public void send();
}

class EmailSender implements Sender
{
    @Override public void send()
    {
        System.out.println(getClass().getName() + " send");
    }
}

class SMSSender implements Sender
{
    @Override public void send()
    {
        System.out.println(getClass().getName() + " send");
    }
}

簡(jiǎn)單工廠模式(多個(gè)方法)

多個(gè)方法的簡(jiǎn)單工廠模式本質(zhì)上還是一種簡(jiǎn)單工廠模式,只不過(guò)將原來(lái)的邏輯判斷分到了不同的執(zhí)行方法中來(lái),每一個(gè)不同的類對(duì)應(yīng)一個(gè)產(chǎn)生它們的方法。這種模式可以避免出現(xiàn)邏輯判斷條件不存在的錯(cuò)誤,由工廠調(diào)用者選擇實(shí)例化的類。


示例代碼

package factory;

public class MultiFactoryMethodTest
{
    public static void main(String[] args)
    {
        SimpleFactory factory = new SimpleFactory();
        Sender s1 = factory.produceEmailSender();
        s1.send();
        Sender s2 = factory.produceSMSSender();
        s2.send();
    }
}

class SimpleFactory
{
    public Sender produceEmailSender()
    {
        return new EmailSender();
    }

    public Sender produceSMSSender()
    {
        return new SMSSender();
    }
}

interface Sender
{
    public void send();
}

class EmailSender implements Sender
{
    @Override public void send()
    {
        System.out.println(getClass().getName() + " send");
    }
}

class SMSSender implements Sender
{
    @Override public void send()
    {
        System.out.println(getClass().getName() + " send");
    }
}

簡(jiǎn)單工廠模式(靜態(tài)方法)

靜態(tài)方法的簡(jiǎn)單工廠模式將原有工廠類中的方法改為靜態(tài)方法,這樣就不用創(chuàng)建工廠類實(shí)例了。

示例代碼

package factory;

public class StaticFactoryMethodTest
{
    public static void main(String[] args)
    {
        Sender s1 = SimpleFactory.produceEmailSender();
        s1.send();
        Sender s2 = SimpleFactory.produceSMSSender();
        s2.send();
    }
}

class SimpleFactory
{
    public static Sender produceEmailSender()
    {
        return new EmailSender();
    }

    public static Sender produceSMSSender()
    {
        return new SMSSender();
    }
}

interface Sender
{
    public void send();
}

class EmailSender implements Sender
{
    @Override public void send()
    {
        System.out.println(getClass().getName() + " send");
    }
}

class SMSSender implements Sender
{
    @Override public void send()
    {
        System.out.println(getClass().getName() + " send");
    }
}

下一篇:JAVA設(shè)計(jì)模式-工廠方法模式

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容