標籤:

設計模式——抽象工廠模式

工廠方法模式有一個問題就是,類的創建依賴工廠類,也就是說,如果想要拓展程序,必須對工廠類進行修改,這違背了閉包原則,所以,從設計角度考慮,有一定的問題,如何解決?就用到抽象工廠模式,創建多個工廠類,這樣一旦需要增加新的功能,直接增加新的工廠類就可以了,不需要修改之前的代碼。因為抽象工廠不太好理解,我們先看看圖,然後就和代碼,就比較容易理解。

請看例子:

[java] view plaincopy

public interface Sender {

public void Send();

}

兩個實現類:

[java] view plaincopy

public class MailSender implements Sender {

@Override

public void Send() {

System.out.println("this is mailsender!");

}

}

[java] view plaincopy

public class SmsSender implements Sender {

@Override

public void Send() {

System.out.println("this is sms sender!");

}

}

兩個工廠類:

[java] view plaincopy

public class SendMailFactory implements Provider {

@Override

public Sender produce(){

return new MailSender();

}

}

[java] view plaincopy

public class SendSmsFactory implements Provider{

@Override

public Sender produce() {

return new SmsSender();

}

}

在提供一個介面:

[java] view plaincopy

public interface Provider {

public Sender produce();

}

測試類:

[java] view plaincopy

public class Test {

public static void main(String[] args) {

Provider provider = new SendMailFactory();

Sender sender = provider.produce();

sender.Send();

}

}

其實這個模式的好處就是,如果你現在想增加一個功能:發及時信息,則只需做一個實現類,實現Sender介面,同時做一個工廠類,實現Provider介面,就OK了,無需去改動現成的代碼。這樣做,拓展性較好!

bjsxt.com (二維碼自動識別)


推薦閱讀:

我弔死在了一顆樹上
[13] 遞歸
剛好的可能就是最好的
新入坑的程序猿們,一起去屠龍吧!
最值得收藏的3大免費少兒編程網站,全是Scratch語言,家長必看

TAG:編程學習 |