问题描述
男人和女人是完全不同的两种人,在对待问题上会有完全不同的态度,如何实现男人和女人各方面的对比。
代码实现
人的抽象类
public abstract class Person
{
public abstract void Accept(Action a);
}
男人、女人具体实现类
public class Man : Person
{
public override void Accept(Action action)
{
action.GetManConclusion(this);
}
}
public class WoMan:Person
{
public override void Accept(Action action)
{
action.GetWoManConclusion(this);
}
}
行为的基础类
public abstract class Action
{
public abstract void GetManConclusion(Man p);
public abstract void GetWoManConclusion(WoMan p);
}
具体行为类
public class Success : Action
{
public override void GetManConclusion(Man p)
{
Console.WriteLine($"{p.GetType().Name} {this.GetType().Name} 时,背后多半有一个伟大的女人。");
}
public override void GetWoManConclusion(WoMan p)
{
Console.WriteLine($"{p.GetType().Name} {this.GetType().Name} 时,背后大多有一个不成功的男人。");
}
}
public class Failed : Action
{
public override void GetManConclusion(Man p)
{
Console.WriteLine($"{p.GetType().Name} {this.GetType().Name} 时,闷头喝酒,谁也不用劝。");
}
public override void GetWoManConclusion(WoMan p)
{
Console.WriteLine($"{p.GetType().Name} {this.GetType().Name} 时,眼泪汪汪,谁也劝不了。");
}
}
人的数据结构
public class ObjStruct
{
List<Person> peoples = new List<Person>();
public void Attach(Person person)
{
peoples.Add(person);
}
public void Detach(Person person)
{
peoples.Remove(person);
}
public void Display(Action action)
{
foreach (var people in peoples)
{
people.Accept(action);
}
}
}
Main方法
internal class Program
{
static void Main(string[] args)
{
ObjStruct objStruct = new ObjStruct();
objStruct.Attach(new Man());
objStruct.Attach(new WoMan());
Success success = new Success();
objStruct.Display(success);
Failed failed = new Failed();
objStruct.Display(failed);
}
}
执行结果
Man Success 时,背后多半有一个伟大的女人。
WoMan Success 时,背后大多有一个不成功的男人。
Man Failed 时,闷头喝酒,谁也不用劝。
WoMan Failed 时,眼泪汪汪,谁也劝不了。