官术网_书友最值得收藏!

1.5 工廠模式

工廠模式是使用最廣的創(chuàng)建型模式之一。顧名思義,它會創(chuàng)建一些東西。確切地說,它會創(chuàng)建對象。工廠模式的用途是借助通用接口將邏輯與使用分開。要了解工廠模式的工作原理,最好的方式就是實踐。打開我們之前創(chuàng)建的項目,或者新建一個項目。最低SDK版本和目標SDK版本對本練習來說并不重要。

當選擇API 21及以上版本時,Android Studio可以采用熱部署技術。熱部署避免了每次運行項目時都要重新構建項目,這大大加快了應用程序的測試速度。因為熱部署能節(jié)約時間,所以若計劃將目標平臺設置成較低的版本,可以在開發(fā)完成之后再降低版本。

我們將構建一個非常簡單的示例應用程序,用于生成“三明治制作應用程序”所需的對象,這些對象代表不同種類的面包。為了強調模式,我們將保持示例的簡單,對象的返回值不會比字符串復雜。

(1)在項目視圖中找到MainActivity.java文件。

(2)右鍵單擊,新建一個Java類,種類選擇接口(Interface),類名叫Bread,如圖1-3所示。

圖1-3

(3)完成接口:

    public interface Bread {
        String name();
        String calories();}

(4)創(chuàng)建Bread的具體類:

    public class Baguette implements Bread {
        @Override
        public String name() {
            return "Baguette";
        }
        @Override
        public String calories() {
            return " : 65 kcal";
        }
      }
    public class Roll implements Bread {
      @Override
      public String name() {
          return "Roll";
      }
      @Override
      public String calories() {
          return " : 75 kcal";
      }
    }
    public class Brioche implements Bread {
      @Override
      public String name() {
          return "Brioche";
      }
      @Override
      public String calories() {
          return " : 85 kcal";
      }
  }

(5)創(chuàng)建一個新類,取名BreadFactory:

    public class BreadFactory {
        public Bread getBread(String breadType) {
            if (breadType == "BRI") {
                return new Brioche();
            } else if (breadType == "BAG") {
                return new Baguette();
            } else if (breadType == "ROL") {
                return new Roll();
            }
            return null;
        }
    }

UML圖

理解設計模式的關鍵在于理解它們的結構以及組件之間的關聯。圖形化是查看設計模式的最佳方式之一,統(tǒng)一建模語言(unified modeling language, UML)類圖則是實現圖形化的好方法。

思考一下,我們剛剛創(chuàng)建的設計模式該如何用圖形化的方式表達。圖1-4給出了示例。

圖1-4

設計模式已經準備就緒,接下來要做的就是查看它的實際效果。對于這個示例,我們將在布局中使用模板生成的TextView。每次主活動(MainActivity)啟動時,onCreate()方法都會被調用。

(1)在文本模式下打開activity_main.xml文件。

(2)為文本視圖添加id:

    <TextView
        android:id="@+id/text_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

(3)打開MainActivity.java文件,依照以下代碼編輯onCreate()方法。

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TextView textView = (TextView) findViewById(R.id.text_view);
        BreadFactory breadFactory = new BreadFactory();
        Bread bread = breadFactory.getBread("BAG");
        textView.setText(new StringBuilder()
                .append(bread.name())
                .toString());
    }

根據Android Studio的設置,可能需要導入TextView小部件:import android. widget.TextView;。通常,編輯器會提示你,按下Alt+Enter快捷鍵即可導入。

現在,可以在模擬器或真機上測試設計模式了,如圖1-5所示。

圖1-5

乍看之下,這可真是小題大做,但也是設計模式的魅力所在。新增的抽象層讓我們無須編輯活動(activity)就能修改類,反之亦然。當需要開發(fā)更復雜的對象以及使用多個工廠時,該特性的實用性將變得更加明顯。

本節(jié)的示例太簡單了,以至于不需要做任何測試。不過,我們不妨來探索如何在真機和模擬器上測試Android應用程序,并學習如何監(jiān)控性能,以及如何通過調試工具,實現不添加額外的屏幕組件即可測試輸出。

主站蜘蛛池模板: 黔江区| 盐边县| 巴彦县| 余姚市| 乐业县| 宣化县| 宿松县| 玛沁县| 凌源市| 乐平市| 五指山市| 新闻| 福建省| 剑川县| 佛坪县| 策勒县| 和林格尔县| 和林格尔县| 马鞍山市| 绍兴市| 桂林市| 岳池县| 兴业县| 沈丘县| 万载县| 沂水县| 新巴尔虎右旗| 胶州市| 洪洞县| 广南县| 文成县| 沿河| 通许县| 东乌珠穆沁旗| 兴海县| 英德市| 塔城市| 兰考县| 白玉县| 吐鲁番市| 威海市|