android 静态工厂方法,工厂方法模式在android的使用

工厂方法模式(Factory Method)

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

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

0818b9ca8b590ca3270a3433284dd417.png

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

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

}

}

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

0818b9ca8b590ca3270a3433284dd417.png

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

技术交流群:179914858

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值