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


工厂方法模式,往往是设计模式初学者入门的模式,的确,有人称之为最为典型最具启发效果的模式。

android中用到了太多的工厂类,其中有用工厂方法模式的,当然也有很多工厂并不是使用工厂方法模式的,只是工具管理类。

今天以ThreadFactory举例说明一下简单工厂模式和工厂方法模式。

工厂方法模式,Factory Method,简单的方式,不简单的应用。

1.意图

定义一个用于创建对象的接口,让子类决定实例化哪个类。工厂方式模式使一个类的实例化延迟到其子类。

热门词汇:虚构造器延迟 创建对象 子类

2.结构图和代码

我们先看看标准的工厂方法结构图:

先抽象的产品类,抽象的工厂类,然后用客户端具体的工厂生产相应的具体的产品,但是客户端并不知道具体的产品是怎么生产的,生产的过程封装在工厂里。所以说,某种程度上,工厂方法模式改变了我们直接用new创建对象的方式,一个很好的开始,意义重大。

以ThreadFactory为例:

这张图其实和原本的结构图有细微的区别,那就是参数化得工厂,而且从业务意义上也有些不同,但是思想是一样的。

我们来看下具体的代码:

[java]view plaincopy
  1. //抽象产品
  2. publicinterfaceRunnable{
  3. publicabstractvoidrun();
  4. }


[java]view plaincopy
  1. //抽象工厂
  2. publicinterfaceThreadFactory{
  3. ThreadnewThread(Runnabler);
  4. }


下面是具体的实现:

比如AsyncTask类中工厂的具体实现如下:

[java]view plaincopy
  1. //工厂实现类
  2. privatestaticfinalThreadFactorysThreadFactory=newThreadFactory(){
  3. privatefinalAtomicIntegermCount=newAtomicInteger(1);
  4. publicThreadnewThread(Runnabler){
  5. returnnewThread(r,"AsyncTask#"+mCount.getAndIncrement());
  6. }
  7. };
  8. //那么产品类在哪里呢?
  9. //做为参数Runnabler,我们可以创建千千万万个此系列的产品类
  10. //同理,我们可以创建另外类似的工厂,生产某种专门的线程,非常容易扩展


看到这里,我们一方面为它的生产便利性感叹,一方面又为没创建某类产品都要创建一个工厂而感到繁琐,所以我们下面介绍简单工厂,它的结构图如下:

简单工厂把抽象工厂去掉了,你就创建一个专门生产某类产品就好。在一些特定而又不负责的领域非常实用方便套用这个模式。

在android中的Connection类中使用到了这个类:

其中Connection这个抽象类,既充当抽象产品类,也充当具体工厂类。

因为这种情况下,我们往往需要的是马上生产子类,getConnection方法往往是静态的,所以简单工厂,也叫静态工厂方法。

我们看看代码如下:

[java]view plaincopy
  1. abstractclassConnection{
  2. staticConnectiongetConnection(
  3. Contextcontext,HttpHosthost,HttpHostproxy,
  4. RequestFeederrequestFeeder){
  5. if(host.getSchemeName().equals("http")){
  6. returnnewHttpConnection(context,host,requestFeeder);
  7. }
  8. //Otherwise,defaulttohttps
  9. returnnewHttpsConnection(context,host,proxy,requestFeeder);
  10. }
  11. }


这就是简单工厂,一个很简单的参数化工厂,真的很简单。

3.效果

1.创建型模式;

2.参数化工厂方法模式得到相应的对象;

3.为子类提供挂钩;

4.连接平行的类层次。

更多相关文章

  1. 《Android(安卓)开发工程师面试指南》
  2. Android(安卓)IPC原理分析小结
  3. Android中ExpandableListView的使用(一)
  4. Android(安卓)IPC机制——Binder详解
  5. Android(安卓)IPC机制(二):AIDL的基本使用方法
  6. 详解 Android(安卓)的 Activity 组件
  7. 在PC端进行android截屏的多种方法
  8. 浅谈Java中Collections.sort对List排序的两种方法
  9. Python list sort方法的具体使用

随机推荐

  1. android基础之Application
  2. Android(安卓)Studio 开发常用快捷键
  3. Android的状态栏
  4. android 设置中文字体。。。。
  5. Android(安卓)禁止带有home属性的APP安装
  6. Android数字证书
  7. Android四大组件之Activity
  8. android 各版本发布时间
  9. Android日志工具
  10. Android(安卓)一些注意