工厂模式
这是大家很容易上手,也是大家学设计模式最开始接触到的模式,确实这个模式很有意思。
书上这么说的:"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中有没有工厂方法的使用?如何使用?