面向對象設計模式之---簡易工廠模式(Simple Factory Pattern)

今天有幸拜讀了以下大鳥的《大話設計模式》,刷新了我的編程三觀,發現如果寫代碼只爲了實現功能,那也太low了,編程就是一門藝術。

工廠模式是一個最簡單的模式,它的主要功能是根據需要創建合適的對象

例如:有一天我口渴了想吃水果,到了水果店,跟裏面的店員說:”我想吃蘋果。“ 店員就拿出來一個蘋果給我。這個水果店就像一個工廠,我想要什麼,店員就拿給我什麼。

工廠模式的UML類圖如下,以上面的吃水果的例子爲例:

UML

Fruit是一個抽象類,有一個屬性name,還有一個公有方法eat。下面的Apple、Orange、Peach類繼承Fruit類。FruitStore類是一個工廠,與Fruit類是關聯關係(水果店需要知道水果的存在),在這個類中,還有一個getFruit方法,返回一個Fruit對象。

工廠模式可以把面向對象的三大特性:封裝、繼承、多態 體現地淋淋盡致了。把水果的共性(有名稱,可以吃)抽象出來進行封裝 做成父類,具體水果繼承 父類具體實現,最後水果店類返回給用戶一個水果對象,當用戶吃水果的時候,就可以具體地吃到某一種水果了,這就是多態

該模式用Java語言實現如下(還是上面水果店的例子):

import java.util.*;

abstract class Fruit
{
  public String name;
  public abstract void eat();
}

class Apple extends Fruit
{
    public Apple()
   {
      this.name = "蘋果";
   }

   public void eat()
   {
        System.out.println("吃蘋果...");
   }
}

class Orange extends Fruit
{
    public Orange()
   {
      this.name = "橘子";
   }

   public void eat()
   {
        System.out.println("吃橘子...");
   }
}

class Peach extends Fruit
{
    public Peach()
   {
      this.name = "桃子";
   }

   public void eat()
   {
        System.out.println("吃桃子...");
   }
}

class FruitStore
{
  public static Fruit getFruit(String type)
  {
    switch(type)
    {
        case "Apple": return new Apple();
        case "Orange": return new Orange();
        case "Peach": return new Peach();
      default: return null;
    }
  }
}

public class Main
{
  public static void main(String args[])
  {
    Fruit f = FruitStore.getFruit("Apple");
    f.eat();
  }
}

運行結果如下:
這裏寫圖片描述

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