简单地说,就好像我是房地产开发商,要盖一座别墅,可是我不知道怎么盖(简单的砌墙,层次较低),也不知道怎么样设计(建几个房间,几个门好看,层次较高), 于是我需要找一民工,他们会砌墙,还得找个设计师,他知道怎么设计,我还要确保民工听设计师的领导,而设计师本身也不干活,光是下命令,这里砌一堵墙,这里砌一扇门,这样民工开始建设,最后,我可以向民工要房子了。在这个过程中,设计师是什么也没有,除了他在脑子里的设计和命令,所以要房子也是跟民工要。

/// <summary>
/// 建造一个房子需要做的工作
/// </summary>
public interface IBuildHouseWork
{
void BuildBalcony();
void BuildKitchen();
void BuildBedroom();
void BuildParlor();
DomainModel.Entities.House DeliverHouse();
}

/// <summary>
/// 中国建筑工人,只会建造中式的房子
/// </summary>
public class ChineseWorker : IBuildHouseWork
{
Entities.House MyHouse = new Entities.House();
public void BuildBalcony()
{
MyHouse.Balcony = "我建了中式阳台";
Console.WriteLine("我建了中式阳台");
}

public void BuildKitchen()
{
MyHouse.Balcony = "我建了中式厨房";
Console.WriteLine("我建了中式厨房");
}

public void BuildBedroom()
{
MyHouse.Balcony = "我建了中式卧室";
Console.WriteLine("我建了中式卧室");
}

public void BuildParlor()
{
MyHouse.Balcony = "我建了中式客厅";
Console.WriteLine("我建了中式客厅");
}
public Entities.House DeliverHouse()
{
Console.WriteLine("造了一个中式风格的房子!");
return MyHouse;

}
}

/// <summary>
/// 西方工人,会建造西式小洋房
/// </summary>
public class WesternWorker:IBuildHouseWork
{
Entities.House MyHouse = new Entities.House();
public void BuildBalcony()
{
MyHouse.Balcony = "我建了西式阳台";
Console.WriteLine("我建了西式阳台");
}

public void BuildKitchen()
{
MyHouse.Balcony = "我建了西式厨房";
Console.WriteLine("我建了西式厨房");
}

public void BuildBedroom()
{
MyHouse.Balcony = "我建了西式卧室";
Console.WriteLine("我建了西式卧室");
}

public void BuildParlor()
{
MyHouse.Balcony = "我建了西式客厅";
Console.WriteLine("我建了西式客厅");
}
public Entities.House DeliverHouse()
{
Console.WriteLine("造了一个西式风格的房子!");
return MyHouse;

}
}

/// <summary>
/// 建筑师
/// </summary>
public class Architect
{
IBuildHouseWork work;
public Architect(IBuildHouseWork work)
{
this.work = work;
}
public void DirectWork()
{
work.BuildBalcony();
work.BuildBedroom();
work.BuildKitchen();
}
}

客户端调用

static void Main(string[] args)
{
IBuildHouseWork buildhouse = new ChineseWorker();
Architect chineseArchitect = new Architect(buildhouse);
chineseArchitect.DirectWork();
buildhouse.DeliverHouse();

buildhouse = new WesternWorker();
Architect westArchitect = new Architect(buildhouse);
westArchitect.DirectWork();
buildhouse.DeliverHouse();
Console.Read();
}

posted on 2012-09-24 16:10  半瓶醋  阅读(180)  评论(0编辑  收藏  举报