Composite Pattern
One-to-one relationship
One-to-many relationship
Example : Command
class Sensor
{
private Command _command;
public void SetCommand(Command cmd)
{
_command = cmd;
}
public void ActEvent()
{
_command.Do();
}
}
class Command
{
public void Do()
{
// Some Action
}
}
Example : Command
class Sensor
{
private List<Command> _commandList;
public void AddCommand(Command cmd)
{
_commandList.Add(cmd);
}
public void ActEvent()
{
foreach (var command in _commandList)
{
command.Do();
}
}
}
Example : Command
class Sensor
{
private Command _command;
public void SetCommand(Command cmd)
{
_command = cmd;
}
public void ActEvent()
{
command.Do();
}
}
class Command
{
public virtual void Do()
{
// Some Action
}
}
class CompositeCommand : Command
{
private List<Command> _commands;
public override void Do()
{
foreach (var command in _commands)
{
command.Do();
}
}
}
Example : Boxes and Products
Example : Boxes and Products
Example : AOCS Simulator
Structure
Applicability
-
When you have to implement a tree-like objects structure
-
When client code don't care about that object is simple or complex elements.
Use the Composite pattern when
Applicability
Adventage
-
Simplify the relation between object.
-
OCP
Cost
-
Complicate composite class.
End.
Composite Pattern
By Jeong Keun Park
Composite Pattern
- 138