以往我们需要一个对象的时候,通过new而建立一个,而消息框架用模块工厂统一创建对象。为何模块或对象要通过模块工厂创建,是不是多此一举。现在我们看个实例:
有A、B、C 三个对象,现在A、B对象各要调用C的m方法,通常是这样的,在A、B各种调用方法中:
C c= new C();
c.m();
功能实现了,比较不错。
有天发现浪费内存,为何A、B都要自己new一个C呢 ,何不用公共的一个呢,于是改造C为单例方式:
public class C {
private final static Singleton INSTANCE = new C();
private C(){}
public static C getInstance(){
return INSTANCE;
}
}
A、B调用改为:
C c= C.getInstance();
c.m()
通过改代码功能实现了,比较完美。
世界总是在变化,不变的是变化!有天新增了D、E类,它们也要调用C的m方法,它俩可以共用一个C,但是它们不要用A、B 创造出来的C,因为它们的C初始值不同。这回看来又要改C,甚至要改A、B,在单例方法中通过输入不同的参数来生成不同的C啦。
为何我们总是被动、为何总是改来改去? 因为我们创造对象的模式导致对象缺乏自由和僵化。使用对象应该像租车或买车一样,不要自己造车,用的时候租它,不用的时候不租,如果非要单独唯一,那就买。现在看模块工厂是如何实现上面的:
C的构造方法就是 new C(),由模块工厂根据不同的名称创造:
A、B都需要一个C ,那么:
C c = getModuleFromFactory("CofAB","c.class")
通过工厂租来一个C,这个C的名字是 "CofAB"
D、E也需要一个不同的C,那么
C c = getModuleFromFactory("CofDE","c.class")
模块工厂另外创造出一个C给DE,它的名字是"CofDE"。
现在我们不需要反复的改来改去,我们需要什么就像工厂发出申请就是了,只要给不同的名字 。
不仅仅是创建和使用,我们在继续。
上面 A、B、C、D、E对象都是相互独立的,如果它们之间要共享数据,则要建立一个共同数据,并要传入每个对象 中。这就使对象之间数据交换比较麻烦,每个对象设计的时候要实现计划好公共数据。
当各对象通过模块工厂建立,那么工厂就自然成为所有对象的一个公共部分,就可以轻易的通过工厂而交换数据了。例如如果A对象希望D对象处理一个数据,那么A对象可以把数据放到工厂里,B对象可以去工厂取。
由于工厂的加入,各个对象由单独的个体自然组成一个整体,而自由的相互沟通,系统有了更大的灵活性。