設計模式1(工廠模式)

轉載:http://blog.csdn.net/zhangerqing

設計模式(Design Patterns)

        可複用面向對象軟件的基礎

1.設計模式:反覆使用,爲多數人知曉的,經過分類編目的,代碼設計的總結

2.可重用代碼,讓代碼更容易讓人理解,保證代碼的可靠性,使代碼編程工程化

3.設計模式的分類:

 3.1創建型模型:工廠方法模式,抽象工廠模式,單例模式,建造者模式,原型模式

3.2結構型模型:適配器模式,裝飾器模式,代理模式,外觀者模式,橋接模式,組合模式,享元模式

3.3行爲性模型:策略模式,模板方法模式,觀察者模式,迭代子模式,責任鏈模式,命令模式,備忘錄模式,狀態模式,訪問者模式,中介者模式,解釋器模式

3.4併發型模式,線程池模式

4.1工廠方法模型(Factory Method)

4.1.1普通工廠模式:建立一個工廠類,對實現了同一接口的類,進行實例的創建

例如創建發送郵件的例子


public interface Sender {  
    public void Send();  
}  

其次,創建實現類

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


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

最後創建工廠類

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

創建測試類

public class FactoryTest {  
  
    public static void main(String[] args) {  
        SendFactory factory = new SendFactory();  
        Sender sender = factory.produce("sms");  
        sender.Send();  
    }  
}  

4.1.2多個工廠方法模式:對普通工廠方法模式的改進,在普通工廠方法的模式中,如果傳遞的字符串出錯,則不能正確的創建對象,而多個工廠方法模式則提供了多個工廠方法,分別創建對象:

 public Sender produceMail(){  
        return new MailSender();  
    }  
      
    public Sender produceSms(){  
        return new SmsSender();  
    }  
}  
測試類如下:

public class FactoryTest {  
  
    public static void main(String[] args) {  
        SendFactory factory = new SendFactory();  
        Sender sender = factory.produceMail();  
        sender.Send();  
    }  
}  


4.1.3靜態工廠方法模式:將多個工廠方法模式裏面的方法置爲靜態,不需要創建實例,直接調用即可

public class SendFactory {  
      
    public static Sender produceMail(){  
        return new MailSender();  
    }  
      
    public static Sender produceSms(){  
        return new SmsSender();  
    }  
}  


public class FactoryTest {  
  
    public static void main(String[] args) {      
        Sender sender = SendFactory.produceMail();  
        sender.Send();  
    }  
}  


總體來說,工廠模式適合的情況:凡事出現大量的產品需要創建的時候,並具有共同的接口,可以通過工廠方法進行創建,在以上的三種模式中,如果第一種傳入的字符串有誤的話,將不能正確的創建對象,第三種相對於第二種則不需要創建工廠類,所以大多數的情況下會選擇第三種設計模式----靜態工廠方法模式





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章