設計模式-簡單工廠模式[JAVA版]


2016年蘋果春季發布會發布了一款迄今最高性能的4英寸iPhone,那么問題來了,蘋果公司的代工廠到底生產多少種尺寸的手機呢? 下面就讓簡單工廠告訴我們答案吧。

  1. 由工廠決定生產哪種型號的的手機,蘋果公司的工廠就是一個工廠類,是簡單工廠模式的核心類。
  2. iPhone5、iPhone5S、iphone6都是蘋果手機,只是型號不同。蘋果手機類滿足抽象的定義,各個型號的手機類是其具體實現。

簡單工廠模式的UML如下:

簡單工廠模式的實現

首先創建一個"蘋果手機"類,定義一個獲取手機尺寸的方法

/**

* 蘋果手機

* @author songwz

*

*/

public abstract class ApplePhone {

 

    /**

     * 獲取尺寸

     */

    protected abstract void getSize();

}

 

蘋果手機不同型號的"手機類"。

/**

* Iphone4

* @author songwz

*

*/

public class Iphone4 extends ApplePhone{

 

    @Override

    public void getSize() {

        System.out.println("iPhone4屏幕:3.5英寸");

    }

 

}

 

/**

* iPhone5

* @author gt780

*

*/

public class Iphone5 extends ApplePhone {

 

    @Override

    public void getSize() {

        System.out.println("iPhone5屏幕:4英寸");

    }

 

}

 

/**

* iPhone6

* @author songwz

*

*/

public class Iphone6 extends ApplePhone{

 

    @Override

    public void getSize() {

        System.out.println("iPhone6屏幕:4.7英寸");

    }

 

}

 

建立一個"工廠類"生產不同型號的"手機對象"。

/**

* 蘋果工廠

* @author songwz

*

*/

public class AppleFactory {

 

    public static ApplePhone createPhone(String model){

        ApplePhone applePhone = null;

        

        switch (model) {

        case"iPhone4":

            applePhone = new Iphone4();

            break;

        case"iPhone5":

            applePhone = new Iphone5();

            break;

        case"iPhone6":

            applePhone = new Iphone6();

            break;

        default:

            break;

        }

        

        returnapplePhone;

    }

}

 

最后是客戶端測試類

public class Client {

 

    public static void main(String[] args) {

        ApplePhone applePhone ;

        applePhone = AppleFactory.createPhone("iPhone4");

        applePhone.getSize();

        applePhone = AppleFactory.createPhone("iPhone5");

        applePhone.getSize();

        applePhone = AppleFactory.createPhone("iPhone6");

        applePhone.getSize();

    }

}

 

簡單工廠的優點:

  • 松耦合,調用方只需與工廠類交互,無需關心實例怎么創建的。
  • 擴展性強,只需新增一個實現類和修改工廠方法即可,這也算缺點的一方面。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM