Java設(shè)計模式-簡單工廠模式

Java設(shè)計模式-簡單工廠模式

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

對實現(xiàn)同一個接口的類,我們可以使用一個工廠類來封裝這些類的創(chuàng)建,通過傳入一個類的標(biāo)識來獲得該類的示例(邏輯判斷)。這種設(shè)計模式我們稱作簡單工廠設(shè)計模式。
下面用UML圖來表示該設(shè)計模式下類與類之間的關(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");
    }
}

簡單工廠模式(多個方法)

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


示例代碼

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");
    }
}

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

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

示例代碼

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è)計模式-工廠方法模式

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

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

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