в простейшем виде то, что Дима описал:

Код AS3:
package
{
import fl.controls.CheckBox;
import flash.display.Sprite;
import flash.events.Event;
public class Main extends Sprite
{
private var _sw1:LogicSorce = new LogicSorce();
private var _sw2:LogicSorce = new LogicSorce();
private var _gate:LogicGate = new LogicGate(_sw1,_sw2);
private var _consumer:LogicConsumer = new LogicConsumer(_gate);
public function Main():void
{
//чекбоксы-переключатели
var cb1:CheckBox = new CheckBox();
var cb2:CheckBox = new CheckBox();
cb2.y = 30;
cb1.addEventListener(Event.CHANGE, change1Handler);
cb2.addEventListener(Event.CHANGE, change2Handler);
addChild(cb1);
addChild(cb2);
}
//переключаем источники, смотрим трейс на потребителе
private function change1Handler(evnt:Event):void
{
_sw1.switchState();
}
private function change2Handler(evnt:Event):void
{
_sw2.switchState();
}
}
}

Код AS3:
package
{
import flash.events.*;
//перключатель
public class LogicSorce extends EventDispatcher
{
private var _output:Boolean = false;
public function LogicSorce()
{
}
public function switchState():void
{
_output = !_output;
dispatchEvent(new Event(Event.CHANGE));
}
public function get output():Boolean
{
return _output;
}
}
}

Код AS3:
package
{
import flash.events.*;
//OR-блок
public class LogicGate extends EventDispatcher
{
private var _output:Boolean = false;
private var _input1:LogicSorce;
private var _input2:LogicSorce;
public function LogicGate(inp1:LogicSorce,inp2:LogicSorce)
{
_input1 = inp1;
_input2 = inp2;
_input1.addEventListener(Event.CHANGE, changeHandler);
_input2.addEventListener(Event.CHANGE, changeHandler);
}
private function changeHandler(evnt:Event):void
{
dispatchEvent(new Event(Event.CHANGE));
}
public function get output():Boolean
{
return _input1.output || _input2.output;
}
}
}

Код AS3:
package
{
import flash.events.Event;
//лампочка
public class LogicConsumer
{
private var _input:LogicGate;
public function LogicConsumer(inp:LogicGate)
{
_input = inp;
_input.addEventListener(Event.CHANGE, changeHandler);
}
private function changeHandler(evnt:Event):void
{
trace("лампочка: " + _input.output);
}
}
}
понятно, что все затейливее:добавление входов на сеттерах, какие-то интерфейсы чтобы универсально добавлять разные типы и т.д., но это уже как бы детали, я так тут намусорил изрядно