android与模式:工厂方法模式-factory method

工厂模式

这是大家很容易上手,也是大家学设计模式最开始接触到的模式,确实这个模式很有意思。

书上这么说的:"Define  an  interface  for  creating  an  object,  but  let  subclasses  decide  which  class
to instantiate." -- 定义一个创建对象的借口,让子类来决定实例化这个类。

这里有3点:

1,定义一个借口,我认为这是决策类,生产工具

2,定义类,上层类,这个类是用来被实现或继承的

3,根据一定条件来实例上层类的子类

我不知道我说的明白还是糊涂。但说个例子大家都很明白了。

上文讲过getSystemService(name)这个方法,这是一个获取系统服务对象的方法,经常用,比如输入法,ams,wms,pms等都是这么来用的,来看代码:

public Object getSystemService(String name) {
        if (getBaseContext() == null) {
            throw new IllegalStateException(
                    "System services not available to Activities before onCreate()");
        }

        if (WINDOW_SERVICE.equals(name)) {
            return mWindowManager;
        } else if (SEARCH_SERVICE.equals(name)) {
            ensureSearchManager();
            return mSearchManager;
        }
        return super.getSystemService(name);
    }

从这里可以看出通过传入name条件,可以生成不同的对象,这些对象都是Object这个对象的子类。从上面3点来看是这样的:getSystemService就是那个接口,Object就是那个上层类,windowmanager,searchmanager就是子类,name就是条件,就是如此。

那么用工厂模式有什么好处呢?谈到设计模式优缺点,我们只需要这么考虑就行:变化。当有变化的时候才能看出设计的巧妙。

工厂模式的妙处就在于其灵活的拓展机制。假设我们需要添加一个新的对象服务,那么只需要做到2步:

1,修改getSystemService方法,添加一个条件

2,新增一个对象服务

那么其他地方都可以不变,这样修改量小,且不影响之前程序的稳定,无疑是很愉快的。


你觉得呢?欢迎举例android中用到的工厂方法。

问个问题:

1,BitmapFactory中有没有工厂方法的使用?如何使用?




你可能感兴趣的:(android,模式,工厂)