工厂方法模式在android的使用

工厂方法模式(Factory Method)

工厂方法模式是类的创建模式,又叫做多态性工厂模式。这个模式的用意在于定义一个创建产品对象的工厂接口,并将实际的创建工作推迟到工厂子类中去完成。

工厂模式支持继承机制,同时,它也克服了在新增加产品角色的时候,我们不需要修改工厂角色。下面我们来看下工厂方法模式的结构示意图:

从上图可以看出,这个模式中涉及到了以下几个角色:

A、抽象工厂角色:这个角色是工厂方法模式的核心,它是与应用无关的,任何在模式中创建对象的工厂类都必须实现它。

B、具体工厂角色:该角色是实现了抽象工厂角色接口的具体类。具体工厂角色含有与应用密切相关的逻辑关系,并被调用创建产品对象。

C、抽象产品角色:工厂方法模式所创建的对象的父类,也是产品对象的共同拥有的接口。

D、具体产品角色:这个角色实现了抽象产品角色,提供给工厂方法进行创建对象。

下面我们以例子说明工厂方法模式的具体使用,我的代码如下:

抽象产品角色:

/* 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);

   }

}

 

在最后,附上我的程序运行的效果图:

 

到这里,我们已经分析完了工厂方法模式的原理及使用了。

 

 

 

技术交流群:179914858

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云水之路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值