今天上班挺忙的,但是下班还是准时回家了。天空飘着小雨,在这寒冷的冬天里,冒着小雨回家,倒是别有一番滋味。
回家后看到小宝宝,一天的烦恼,疲惫、不开心都没有了。吃完晚饭,老婆抱着孩子喂奶,要我给宝宝洗口水布、洗毛巾、洗衣服……
老婆叨叨说了好一会,天啦,我完全蒙了。不但洗的衣服多,还要按照顺序洗,先洗口水布、再洗毛巾、接下来洗上衣、再洗裤子……瞬间奔溃。
在我辛劳的工作下,好不容易花了半个多小时,自认为已经很完美的洗好了所有衣服,结果发现袜子忘记洗了。结果又被是一顿叨叨。
虽然心里不服气,我也没说什么。但是对于一个技术屌丝来说,总会忍不住想有没有办法从技术的角度来解决这样的问题。接着我就在电脑上模拟了一下洗衣服这个过程。
首先来看看正常情况下不出错的洗衣服是这样的。严格按照步骤一步步来。
/// <summary>
/// 老婆洗衣服
/// </summary>
public class WifeWashClothes
{
/// <summary>
/// 洗口水布
/// </summary>
public void WashSaliva()
{
Console.WriteLine("老婆把口水布洗好了!");
}
/// <summary>
/// 洗毛巾
/// </summary>
public void WashTowel()
{
Console.WriteLine("老婆把毛巾洗好了!");
}
/// <summary>
/// 洗上衣
/// </summary>
public void WashJacket()
{
Console.WriteLine("老婆把上衣洗好了!");
}
/// <summary>
/// 洗裤子
/// </summary>
public void WashPants()
{
Console.WriteLine("老婆把裤子洗好了!");
}
/// <summary>
/// 洗袜子
/// </summary>
public void WashSocks()
{
Console.WriteLine("老婆把袜子洗好了!");
}
}
而我洗的时候,忘记洗袜子了,因此变成了这样……
/// <summary>
/// 老公洗衣服
/// </summary>
public class HusbandWashClothes
{
/// <summary>
/// 洗口水布
/// </summary>
public void WashSaliva()
{
Console.WriteLine("老公把口水布洗好了!");
}
/// <summary>
/// 洗毛巾
/// </summary>
public void WashTowel()
{
Console.WriteLine("老公把毛巾洗好了!");
}
/// <summary>
/// 洗上衣
/// </summary>
public void WashJacket()
{
Console.WriteLine("老公把上衣洗好了!");
}
/// <summary>
/// 洗裤子
/// </summary>
public void WashPants()
{
Console.WriteLine("老公把裤子洗好了!");
}
}
我在想,我上班一天天忙忙碌碌的,风里来雨里去,有没有一个办法能让我记住或者帮助我来完成洗衣服,抱着顺序不会乱,也不会丢下什么东西不洗呢?后来我想想,要不给自己写一个步骤图贴上,每天洗衣服的时候看看吧,于是洗衣服就变成这样了。
/// <summary>
/// 写一个步骤图,每天洗衣服的时候看看
/// </summary>
public abstract class WashClothes
{
/// <summary>
/// 洗口水布
/// </summary>
public abstract void WashSaliva();
/// <summary>
/// 洗毛巾
/// </summary>
public abstract void WashTowel();
/// <summary>
/// 洗上衣
/// </summary>
public abstract void WashJacket();
/// <summary>
/// 洗裤子
/// </summary>
public abstract void WashPants();
/// <summary>
/// 洗口袜子
/// </summary>
public abstract void WashSocks();
}
接下来就是我每次洗衣服的时候都抬头看看顺序,避免洗衣服出错。
/// <summary>
/// 老公洗衣服
/// </summary>
public class HusbandWashClothes : WashClothes
{
/// <summary>
/// 洗口水布
/// </summary>
public override void WashSaliva()
{
Console.WriteLine("老公把口水布洗好了!");
}
/// <summary>
/// 洗毛巾
/// </summary>
public override void WashTowel()
{
Console.WriteLine("老公把毛巾洗好了!");
}
/// <summary>
/// 洗上衣
/// </summary>
public override void WashJacket()
{
Console.WriteLine("老公把上衣洗好了!");
}
/// <summary>
/// 洗裤子
/// </summary>
public override void WashPants()
{
Console.WriteLine("老公把裤子洗好了!");
}
/// <summary>
/// 洗口袜子
/// </summary>
public override void WashSocks()
{
Console.WriteLine("老公把袜子洗好了!");
}
}
通过上面的这些措施,我确保了每次洗衣服都正确,而且也不会漏掉,但是我的心好累,因为每次我都要记住这些顺序,每次都要看步骤图,这样的洗衣服,比工作还复杂,我该怎么办呢?我想要是我能发明一个机器人,每次我洗衣服的时候它都能把衣服的顺序准备的摆好,并且把要洗的按次序递给我就好了。这样我就不要去记这些无聊的顺序,而且也不会出错了。多么美好的想法,我该如何实现?
我觉得应该有一个机器人,我给他取名叫Director,它知道洗衣服的所有正确步骤,每次只要告诉他有人要洗衣服了,它就会工作。简单实现如下:
/// <summary>
/// 机器人(指挥者)Director
/// </summary>
public class Director
{
/// <summary>
/// 每次启动前,先告诉它要洗衣服了
/// </summary>
private WashClothes washClothes;
/// <summary>
/// 启动机器人 Director
/// </summary>
public Director(WashClothes wc)
{
this.washClothes = wc;
}
/// <summary>
/// 机器人按顺序处理
/// </summary>
public void DirectorWashClothes()
{
washClothes.WashSaliva();
washClothes.WashTowel();
washClothes.WashJacket();
washClothes.WashPants();
washClothes.WashSocks();
}
}
哈哈,有了机器人Director真是轻松太多了,以后在洗衣服,我就可以直接告诉它我要洗衣服了,然后它就会按正确顺序递给我,再也不用担心出错了。
//洗衣服,不要自己去注意到底先要做什么了,交给机器人
Director director = new Director(new WifeWashClothes());
director.DirectorWashClothes();
后来仔细想想,其实洗衣服的过程是稳定不变的,都是按照一定的顺序来做。但是具体的细节却有不同,有可能洗衣服的人不同,洗衣服用的盆不一样等等。但是对于宝宝来说,只要把衣服洗了就行,他不管你如何实现,怎么做。按照设计模式的思想,这或许就是最简单的创建者模式。
创建者模式定义:将一个复杂对象的构建与它的表示相分离,使得同样的构建过程可以创建不同的表示。
参考:《设计模式》、《设计模式解析》、《大话设计模式》
本人是菜鸟,水平极为有限,有很多不足的地方,请大家批评赐教,感激不尽。