当前位置: 首页 > 科技观察

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

时间:2023-03-19 15:07:53 科技观察

工厂方法模式往往是设计模式初学者的入门级模式。的确,有人称其为最典型、最鼓舞人心的模式。android中使用的工厂类太多了,其中工厂方法模式很有用。当然,很多工厂并没有使用工厂方法模式,而只是使用工具管理类。今天以ThreadFactory为例,来说明一下简单工厂模式和工厂方法模式。工厂方法模式,FactoryMethod,简单的方式,不简单的应用。1、意图是定义一个创建对象的接口,让子类决定实例化哪个类。工厂方式模式将类的实例化推迟到其子类。热词:虚构造函数延迟对象子类的创建二、结构图和代码先来看标准工厂方法结构图:先抽象产品类,抽象工厂类,然后使用客户的具体工厂生产对应的具体产品,但是客户端并不知道具体的产品是如何生产出来的,生产过程封装在工厂里。所以,某种程度上,工厂方法模式改变了我们直接用new创建对象的方式,这是一个好的开始,意义重大。以ThreadFactory为例:这个图其实和原来的结构图有点不同,就是参数化工厂,从业务角度看也有些不同,但是思路是一样的。下面看具体代码://抽象产品publicinterfaceRunnable{publicabstractvoidrun();}//抽象工厂publicinterfaceThreadFactory{ThreadnewThread(Runnabler);}下面是具体实现:比如AsyncTask类中工厂的具体实现如下://工厂实现类privatestaticfinalThreadFactorysThreadFactory=newThreadFactory(){privatefinalAtomicIntegermCount=newAtomicInteger(1);publicThreadnewThread(Runnabler){returnnewThread(r,"AsyncTask#"+mCount.getAndIncrement());}};//产品类在哪里?//作为一个参数Runnabler,我们可以创建这个系列的几万个产品类别//同样,我们可以再创建一个类似的工厂来生产某种特殊的线程,非常容易扩展。看到这里,我们一方面惊叹于它在生产上的便捷性,一方面又觉得创建工厂又不创建某类产品很麻烦,所以下面介绍一下简单工厂,以及它的结构图如下:简单工厂去掉抽象工厂,你创建一个专门做某类产品的就可以了。在一些特定的、不负责任的领域应用这种模式是非常实用和方便的。这个类用在android中的Connection类中:抽象类Connection既是一个抽象的产品类,也是一个具体的工厂类。因为在这种情况下,我们往往需要的是立即产生子类,而getConnection方法往往是静态的,所以简单工厂也称为静态工厂方法。我们看代码如下:abstractclassConnection{staticConnectiongetConnection(Contextcontext,HttpHosthost,HttpHostproxy,RequestFeederrequestFeeder){if(host.getSchemeName().equals("http")){returnnewHttpConnection(context,host,requestFeeder);}//Otherwise,defaulttohttpsreturnnewHttpsConnection(context,host,proxy,requestFeeder);}}这是一个简单的工厂,一个很简单的参数化工厂,真的很简单。三、效果1、创造模式;2.参数化工厂方法方式获取对应对象;3、为子类提供钩子;4.连接平行的类层次结构。