




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】Android中工厂方法模式的作用是什么
这期内容当中在下将会给大家带来有关Android中工厂方法模式的作用是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。一、介绍工厂方法模式(FactoryPattern),是创建型设计模式之一。工厂方法模式是一种结构简单的模式,其在我们平时开发中应用很广泛,也许你并不知道,但是你已经使用了无数次该模式了,如Android中的Activity里的各个生命周期方法,以onCreate方法为例,它就可以看作是一个工厂方法,我们在其中可以构造我们的View并通过setContentView返回给framework处理等,相关内容我们下面再讲,先看看工厂方法模式定义。二、定义定义一个用于创建对象的接口,让子类决定实例化哪个类。三、使用场景在任何需要生成复杂对象的地方,都可以使用工厂方法模式。复杂对象适合使用工厂模式,用new就可以完成创建的对象无需使用工厂模式。四、模式的简单实现抽象产品类:public
abstract
class
Product
{
/**
*
产品类的抽象方法
*
由具体的产品类去实现
*
*/
public
abstract
void
method();
}具体产品类A:public
class
ConcreteProductA
extends
Product
{
@Override
public
void
method()
{
System.out.println("我是具体的产品A");
}
}具体产品类B:public
class
ConcreteProductB
extends
Product
{
@Override
public
void
method()
{
System.out.println("我是具体的产品B");
}
}抽象工厂类:public
abstract
class
Factory
{
/**
*
抽象工厂方法
*
具体由子类实现
*
*
@return
具体的产品对象
*
*/
public
abstract
Product
createProduct();
}具体工厂类:public
class
ConcreteFactory
extends
Factory
{
/**
*
具体工厂类
*
*/
@Override
public
Product
createProduct()
{
return
new
ConcreteProductA();
}
}客户类:public
class
Client
{
public
static
void
main(String[]
args)
{
Factory
factory
=
new
ConcreteFactory();
Product
product
=
factory.createProduct();
product.method();
}
}结果:我是具体的产品A这里的几个角色都很简单,主要分为四大模块,一是抽象工厂,其为工厂方法模式的核心;二是具体工厂,其实现了具体的业务逻辑;三是抽象产品,是工厂方法模式所创建的产品的父类;四是具体产品,为实现抽象产品的某个具体产品的对象。上述的代码中我们在Client类中构造了一个工厂对象,并通过其生产了一个产品对象,这里我们得到的产品对象是ConcreteProductA的实例,如果想得到ConcreteProductB的实例,更改ConcreteFactory中的逻辑即可:public
class
ConcreteFactory
extends
Factory
{
/**
*
具体工厂类
*
*/
@Override
public
Product
createProduct()
{
//return
new
ConcreteProductA();
return
new
ConcreteProductB();
}
}这种方式比较常见,需要哪一个产品就生产哪一个,有时候也可以利用反射的方式更简洁的来生产具体产品对象,此时,需要在工厂方法的参数列表中传入一个Class类来决定是哪一个产品类:public
abstract
class
Factory
{
/**
*
抽象工厂方法
*
具体由子类实现
*
*
@param
clz
产品对象类类型
*
*
@return
具体的产品对象
*
*/
public
abstract
<T
extends
Product>
T
createProduct(Class<T>
clz);
}对于具体的工厂类,则通过反射获取类的示例即可:public
class
ConcreteFactory
extends
Factory
{
/**
*
具体工厂类
*
*/
@SuppressWarnings("unchecked")
@Override
public
<T
extends
Product>
T
createProduct(Class<T>
clz)
{
Product
product
=
null;
try
{
product
=
(Product)
Class.forName(clz.getName()).newInstance();
}
catch
(Exception
e)
{
e.printStackTrace();
}
return
(T)product;
}
}最后在看看Client中的实现:public
class
Client
{
public
static
void
main(String[]
args)
{
Factory
factory
=
new
ConcreteFactory();
Product
product
=
factory.createProduct(ConcreteProductB.class);
product.method();
}
}需要哪一个类的对象就传入哪一个类的类型即可,这种方法比较简洁、动态,如果你不喜欢这种方式,也可以尝试为每一个产品都定义一个具体的工厂,各司其职。public
class
ConcreteFactoryA
extends
Factory
{
/**
*
具体工厂类
**/
@Override
public
Product
createProduct()
{
return
new
ConcreteProductA();
}
}
public
class
ConcreteFactoryB
extends
Factory
{
/**
*
具体工厂类
**/
@Override
public
Product
createProduct()
{
return
new
ConcreteProductB();
}
}
public
class
Client
{
public
static
void
main(String[]
args)
{
Factory
factoryA
=
new
ConcreteFactoryA();
Product
productA
=
factoryA.createProduct();
productA.method();
Factory
factoryB
=
new
ConcreteFactoryB();
Product
productB
=
factoryB.createProduct();
productB.method();
}
}像这样拥有多个工厂的方式我们称为多工厂方法模式,同样的,回到我们最初的那个工厂方法模式,当我们的工厂只有一个的时候,我们还是为工厂提供了一个抽象类,那么,我们是否可以将其简化掉呢?如果确定你的工厂类只有一个,那么简化掉抽象类是肯定没问题的,我们只需要将对应的工厂方法改为静态方法即可:public
class
Factory
{
/**
*
具体工厂类
**/
@Override
public
static
Product
createProduct()
{
return
new
ConcreteProductA();
}
}像这样的方式又称为简单工厂模式或静态工厂模式,它是工厂方法模式的一个弱化版本。其实到这里大家应该可以发现,工厂方法模式是完全符合设计原则的,其降低了对象之间的耦合度,而且,工厂方法模式依赖于抽象的架构,其将实例化的任务交由子类去完成,有非常好的扩展性。五、Android源码中的工厂方法模式Activ
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 批发商信誉评估考核试卷
- Unit8 Section B reading教学设计- 2024-2025学年人教版八年级英语上册
- 期货市场交易员职业技能培训与提升考核试卷
- 毛皮制品加工行业环境保护与低碳经济考核试卷
- 森林害虫防治与气候变化适应性管理考核试卷
- 文具行业渠道整合与创新考核试卷
- 健身器材制造业生产效率提升与精益化管理考核试卷
- 批发业务中的客户关系管理系统应用考核试卷
- 残疾人座车国内外市场对比分析考核试卷
- 病案管理部门信息化建设计划
- 2024年中国包子行业发展前景及投资前景预测报告(智研咨询)
- 2024年全国职业院校技能大赛高职组(婴幼儿健康养育照护赛项)考试题库(含答案)
- 学校食堂餐饮服务投标方案(技术方案)
- 国企集团公司各岗位廉洁风险点防控表格(廉政)范本
- 儿童健康产业行业研究报告
- 任务型阅读-小升初英语专项练习(译林版三起)
- 部编版语文二年级下册第三单元教材解读大单元集体备课
- 七年级地理上册期末试卷(可打印)
- ISO28000:2022供应链安全管理体系
- AES-EBU信号的计算机采集
- 重症监测治疗与复苏
评论
0/150
提交评论