Factory 方法模式在android的使用

來源:互聯網
上載者:User

標籤:android   原廠模式   

Factory 方法模式(Factory Method)

Factory 方法模式是類的建立模式,又叫做多態性原廠模式。這個模式的用意在於定義一個建立產品對象的工廠介面,並將實際的建立工作延遲到工廠子類中去完成。

原廠模式支援繼承機制,同時,它也克服了在新增加產品角色的時候,我們不需要修改工廠角色。下面我們來看下Factory 方法模式的結構:

從可以看出,這個模式中涉及到了以下幾個角色:

A、抽象工廠角色:這個角色是Factory 方法模式的核心,它是與應用無關的,任何在模式中建立對象的工廠類都必須實現它。

B、具體工廠角色:該角色是實現了抽象工廠角色介面的具體類。具體工廠角色含有與應用密切相關的邏輯關係,並被調用建立產品對象。

C、抽象產品角色:Factory 方法模式所建立的對象的父類,也是產品對象的共同擁有的介面。

D、具體產品角色:這個角色實現了抽象產品角色,提供給Factory 方法進行建立對象。

下面我們以例子說明Factory 方法模式的具體使用,My Code如下:

抽象產品角色:

/* the role of abstract */

public abstract class WifiState {

   private String wifiName;

   private int wifiType;

   private int ip;

  

   public String getWifiName() {

      return wifiName;

   }

 

   public void setWifiName(String wifiName) {

      this.wifiName = wifiName;

   }

 

   public int getWifiType() {

      return wifiType;

   }

 

   public void setWifiType(int wifiType) {

      this.wifiType = wifiType;

   }

 

   public int getIp() {

      return ip;

   }

 

   public void setIp(int ip) {

      this.ip = ip;

   }

}

具體產品角色(無需密碼WIFI):

/* the role of concret */

public class WifiStateNoPwd extends WifiState {

  

   public WifiStateNoPwd() {

      setWifiName("無密碼WIFI,可以直接使用哦!");

      setWifiType(0);

      setIp(1921682204);

   }

}

具體產品角色(要求輸入密碼WIFI):

/* the role of concret */

public class WifiStateNeedPwd extends WifiState {

  

   public WifiStateNeedPwd() {

      setWifiName("只有輸入密碼才能使用的WIFI!");

      setWifiType(1);

      setIp(1921682205);

   }

}

具體產品角色(收費的WIFI):

public class WifiStateCharges extends WifiState {

  

   public WifiStateCharges() {

      setWifiName("需要付費用的的WIFI!你願意使用嗎!");

      setWifiType(2);

      setIp(1921682206);

   }

}

抽象工廠角色:

/* the role of abstract method */

public interface WifiFactory {

  

   public WifiState factory();

}

具體工廠角色(無需密碼WIFI工廠):

/* the role of concret method */

public class WifiNoPwdFactory implements WifiFactory {

 

   @Override

   public WifiState factory() {

      return new WifiStateNoPwd();

   }

}

具體工廠角色(要求輸入密碼WIFI工廠):

/* the role of concret method */

public class WifiNeedPwdFactory implements WifiFactory {

 

   @Override

   public WifiState factory() {

      return new WifiStateNeedPwd();

   }

}

具體工廠角色(收費WIFI工廠):

/* the role of concret method */

public class WifiChargesFactory implements WifiFactory {

 

   @Override

   public WifiState factory() {

      return new WifiStateCharges();

   }

}

 

用戶端角色(client):

public class FactoryMethodActivity extends Activity {

   private static String TAG = "VerifyFactoryMethodActivity";

  

   private WifiFactory currFactory;

   private WifiState currWifi;

  

   @Override

   protected void onCreate(BundlesavedInstanceState) {

      super.onCreate(savedInstanceState);

      setContentView(R.layout.activity_verify_factory_method);

     

      // 不要求輸入密碼的WIFI

      currFactory = new WifiNoPwdFactory();

      currWifi = currFactory.factory();

      log("WIFI資訊:"+currWifi.getWifiName() +"==="

            + currWifi.getWifiType() + "===" + currWifi.getIp());

      // 要求輸入密碼的WIFI

      currFactory = new WifiNeedPwdFactory();

      currWifi = currFactory.factory();

      log("WIFI資訊:"+currWifi.getWifiName() +"==="

            + currWifi.getWifiType() + "===" + currWifi.getIp());

      // 收費的WIFI

      currFactory = new WifiChargesFactory();

      currWifi = currFactory.factory();

      log("WIFI資訊:"+currWifi.getWifiName() +"==="

            + currWifi.getWifiType() + "===" + currWifi.getIp());

   }

  

   private void log(String log) {

      Log.d(TAG, log);

   }

}

 

在最後,附上我的程式啟動並執行:

 

到這裡,我們已經分析完了Factory 方法模式的原理及使用了。

 

 

 

技術交流群:179914858

Factory 方法模式在android的使用

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.