Active Object 模式是Command模式的一種,是實(shí)現(xiàn)多線程控制的一項(xiàng)古老技術(shù) .
在《敏捷軟件開發(fā)》這本書中描述的算法如下:
1、構(gòu)造一個命令。(實(shí)現(xiàn)Command模式的一個命令)
2、將該命令放入
Active Object Engine(也就是放入一個隊(duì)列,LinkedList)
3、從該Engine取出一個命令,執(zhí)行,若該命令沒有執(zhí)行過,設(shè)為執(zhí)行過,然后將自己加入隊(duì)列尾部,若執(zhí)行過,判斷該命令執(zhí)行需要的事件發(fā)生沒有,未發(fā)生,再將自己加入隊(duì)列尾部。事件發(fā)生了,將需要執(zhí)行的命令加入隊(duì)列尾部。
優(yōu)點(diǎn):
1:減弱了comsumer的復(fù)雜性,因?yàn)橹挥幸粋€comsumer了
2:可以自己對命令設(shè)計(jì)一下優(yōu)先級,對命令可以優(yōu)先級調(diào)度
3:使用了Command Pattern,所以可以保存命令再執(zhí)行
缺點(diǎn):
只用一個線程在執(zhí)行,如果其中一個命令很耗時,將影響其它命令的執(zhí)行。
解決辦法有兩個:
1:可以使用調(diào)度算法,將按照耗時來排序,再加上排的越久,優(yōu)先級越高;
2:在一個程序中,使用多個活動對象,也相當(dāng)于有多個線程在執(zhí)行了,在一定程度上能夠解決效率的問題。
參考
http://flowercat.javaeye.com/blog/93665
http://blog.csdn.net/cn854/archive/2009/07/27/4385552.aspx