# Poco

# template < class TArgs, class TDelegate >

# class NotificationStrategy

Library: Foundation
Package: Events
Header: Poco/NotificationStrategy.h

## Description

The interface that all notification strategies must implement.

Note: Event is based on policy-driven design, so every strategy implementation must provide all the methods from this interface (otherwise: compile errors) but does not need to inherit from NotificationStrategy.

## Member Summary

Member Functions: add, clear, detach, detachAll, empty, notify, remove

## Types Aliases

### DelegateHandle

using DelegateHandle = TDelegate *;

### DelegatePtr

using DelegatePtr = SharedPtr < TDelegate >;

### Delegates

using Delegates = std::vector < DelegatePtr >;

## Constructors

### NotificationStrategy

NotificationStrategy() = default;

## Destructor

### ~NotificationStrategy

virtual ~NotificationStrategy() = default;

## Member Functions

### add

virtual DelegateHandle add(
const TDelegate & delegate
) = 0;

Adds a delegate to the strategy.

### clear

virtual void clear() = 0;

Removes all delegates from the strategy.

### detach

virtual DelegatePtr detach(
const TDelegate & delegate
) = 0;

Removes a matching delegate from the strategy without disabling it, and returns the detached delegate (or an empty DelegatePtr if no match). The caller is responsible for calling disable() on the returned delegate. AbstractEvent uses this to avoid holding the event mutex across Delegate::disable() — see AbstractEvent::operator -= for the lock-order rationale.

### detach

virtual DelegatePtr detach(
DelegateHandle delegateHandle
) = 0;

Same as detach(const TDelegate&), keyed by handle.

### detachAll

virtual Delegates detachAll() = 0;

Removes all delegates from the strategy without disabling them and returns them, so the caller can disable() each outside its own mutex. AbstractEvent::clear() uses this for the same reason detach() exists.

### empty

virtual bool empty() const = 0;

Returns false if the strategy contains at least one delegate.

### notify

virtual void notify(
const void * sender,
TArgs & arguments
) = 0;

Sends a notification to all registered delegates.

### remove

virtual void remove(
const TDelegate & delegate
) = 0;

Removes a delegate from the strategy, if found. Does nothing if the delegate has not been added.

### remove

virtual void remove(
DelegateHandle delegateHandle
) = 0;

Removes a delegate from the strategy, if found. Does nothing if the delegate has not been added.