c# - Observer pattern with delegate and events using an event array -
we have class manages many queues store data. want user notified when new data added each of these queues. i'd use observer pattern using delegate , events. single event , source, we'd do:
public delegate void newdataaddeddelegate(); public event newdataaddeddelegate newdataadded;
and observer:
qmanager.newdataadded += new qmanager.newdataaddeddelegate(getnewdatafunc);
but in case, have, say, 10 queues, each of can receive data arbitrarily. we'd observer functions subscribe individual queue. thought do:
public delegate void newdataaddeddelegate(); public event newdataaddeddelegate [] newdataadded; // can't
and in constructor of qmanager:
newdataadded = new newdataaddeddelegate[numberofqueues];
and in observer:
qmanager.newdataadded[0] += new qmanager.newdataaddeddelegate(getnewdatafunc0); qmanager.newdataadded[1] += new qmanager.newdataaddeddelegate(getnewdatafunc1);
but no go, since event expected delegate type, not array of delegates type.
any ideas on how approach problem?
no, events don't work that. options:
create type exposes event, , have array or collection of type:
// preferably *don't* expose array... public typewithevent[] queues { { ... } } // subscription: qmanager.queues[i].newdataadded += ...
alternatively, don't use events, , have method:
private newdataaddededdelegate[] newdataadded; public void subscribenewdataaddedhandler(int queue, newdataaddeddelegate handler) { newdataadded[queue] += handler; } // subscription qmanager.subscribenewdataaddedhandler(0, ...);
personally sounds me each queue should own object though... make queue manager exposes collection of queues, each of can subscribed individually. (i.e. take first approach.) otherwise queue manager doing work.
Comments
Post a Comment