工厂方法模式在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

时间: 2024-10-12 12:05:32

工厂方法模式在android的使用的相关文章

java/android 设计模式学习笔记(3)---工厂方法模式

这篇来介绍一下工厂方法模式(Factory Method Pattern),在实际开发过程中我们都习惯于直接使用 new 关键字用来创建一个对象,可是有时候对象的创造需要一系列的步骤:你可能需要计算或取得对象的初始设置:选择生成哪个子对象实例:或在生成你需要的对象之前必须先生成一些辅助功能的对象,这个时候就需要了解该对象创建的细节,也就是说使用的地方与该对象的实现耦合在了一起,不利于扩展,为了解决这个问题就需要用到我们的工厂方法模式,它适合那些创建复杂的对象的场景,工厂方法模式也是一个使用频率很

Android设计模式——工厂方法模式(Factory Method)

二十三种设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元模式. 行为型模式,共十一种:策略模式.模板方法模式.观察者模式.迭代子模式.责任链模式.命令模式.备忘录模式.状态模式.访问者模式.中介者模式.解释器模式. 1 package com.example.main; 2 3 import android.app.Activity; 4 import

Android设计模式系列--工厂方法模式

工厂方法模式,往往是设计模式初学者入门的模式,的确,有人称之为最为典型最具启发效果的模式.android中用到了太多的工厂类,其中有用工厂方法模式的,当然也有很多工厂并不是使用工厂方法模式的,只是工具管理类.今天以ThreadFactory举例说明一下简单工厂模式和工厂方法模式. 工厂方法模式,Factory Method,简单的方式,不简单的应用. 1.意图定义一个用于创建对象的接口,让子类决定实例化哪个类.工厂方式模式使一个类的实例化延迟到其子类.热门词汇:虚构造器 延迟 创建对象 子类 2

Android设计模式--工厂方法模式

1.定义: Define an interface for creating an object, but let subclasses decide which class to instantiate. Factory Method lets a class defer instantiation to subclasses. 定义一个用于创建对象的接口,让子类决定实例化哪个类. 2.意义: 工厂方法使得类的实例化延伸到子类. 3.四大角色: 3.1.抽象工厂:工厂方法模式的核心,任何在模式

Android中的设计模式-工厂方法模式

简单工厂&工厂方法 一直以来总是分不清简单工厂,工厂方法,抽象工厂这三个设计模式的区别,倒不是不理解其区别,而是总是记忆混淆,傻傻分不清楚,所以再重新总结一下区别,并记录下来,下次再混淆时,可以拿出来看看.这节先说简单工厂和工厂方法,下一节再说抽象工厂. 工厂方法中其实就包含了简单工厂,简单工厂也称为静态工厂方法, 简单工厂模式(Simple Factory) 类图 简单工厂模式又称为静态工厂方法模式,是工厂方法模式的一种,简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产

工厂方法模式(Java与Kotlin版)

前文推送 设计模式 简单工厂模式(Java与Kotlin版) Kotlin基础知识 Kotlin入门第一课:从对比Java开始 Kotlin入门第二课:集合操作 Kotlin入门第三课:数据类型 初次尝试用Kotlin实现Android项目 1. 定义 工厂方法模式(Factory Method Pattern)又称为工厂模式,也叫虚拟构造器(Virtual Constructor)模式或者多态工厂(Polymorphic Factory)模式,它属于类创建型模式.在工厂方法模式中,工厂父类负责

C#设计模式——工厂方法模式

一.引言 在简单工厂中讲到简单工厂模式的缺点,有一点是--简单工厂模式系统难以扩展,一旦添加新产品就不得不修改简单工厂方法,这样就会造成简单工厂的实现逻辑过于复杂,然而本专题介绍的工厂方法模式可以解决简单工厂模式中存在的这个问题,下面就具体看看工厂模式是如何解决该问题的. 二.工厂方法模式的实现 工厂方法模式之所以可以解决简单工厂的模式,是因为它的实现把具体产品的创建推迟到子类中,此时工厂类不再负责所有产品的创建,而只是给出具体工厂必须实现的接口,这样工厂方法模式就可以允许系统不修改工厂类逻辑的

工厂方法模式

开放-封闭原则: 在设计模式中,对于不能修改,但可以扩展的思想也是一种重要的设计原则.比如国家对于香港的一国两制.大陆的社会主义是不可以更改的,但由于香港长期处于资本主义下,强制执行社会主义难免有些牵强,所以邓小平同志就用了开放-封闭原则,完美的解决了这一问题.在前期进行软件设计的时候,应该做好后期新增需求的准备.尽量做到新增需求时,不需要更改已有代码,而是新增代码,进行需求的扩展. 工厂方法模式: 问题抛出:在上一篇文章中,通过一个简单的两位数计算介绍了简单工厂模式.在这基础上,试想如果我们需

Java设计模式—工厂方法模式&抽象工厂模式

工厂方法模式与抽象工厂模式都是设计模式中重要而且常见的模式.       工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法使一个类的实例化延迟到其子类. 通用类图如下: 在工厂方法模式中,抽象产品类Product负责定义产品的共性,实现对事物最抽象的定义:Creator为抽象创建 类,也就是抽象工厂,具体如何创建产品类是由具体的实现工厂ConcreteCreator完成的. 工厂方法模式的扩展方式有很多种,下边是工厂方法模式一个比较实用的源代码: 抽象产品类: pub