统一对象消息编程详解——模块工厂的价值

       以往我们需要一个对象的时候,通过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对象可以去工厂取。

由于工厂的加入,各个对象由单独的个体自然组成一个整体,而自由的相互沟通,系统有了更大的灵活性。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值