using System;
namespace HelloWorld
{
public class MessageStrategy
{
public Action act { get; private set; }
public MessageStrategy(Action act)
{
this.act = act;
}
public void sendMessage()
{
act();
}
}
public abstract class AbstractStrategyFactory
{
public abstract MessageStrategy createStrategy(MessageBody mb);
}
public class MessageBody
{
public Object payload { get; set; }
public void send(MessageStrategy ms)
{
ms.sendMessage();
}
}
public class DefaultFactory : AbstractStrategyFactory
{
private DefaultFactory() { }
static DefaultFactory instance = new DefaultFactory();
public static AbstractStrategyFactory getInstance()
{
return instance;
}
public override MessageStrategy createStrategy(MessageBody mb)
{
return new MessageStrategy(() => { Console.WriteLine(mb.payload.ToString()); });
}
}
class Program
{
static void Main(string[] args)
{
MessageBody mb = new MessageBody();
mb.payload = "Hello World";
AbstractStrategyFactory asf = DefaultFactory.getInstance();
MessageStrategy strategy = asf.createStrategy(mb);
mb.send(strategy);
}
}
}