zoukankan      html  css  js  c++  java
  • 给宝宝洗衣服,你应该按套路出牌

    今天上班挺忙的,但是下班还是准时回家了。天空飘着小雨,在这寒冷的冬天里,冒着小雨回家,倒是别有一番滋味。

    回家后看到小宝宝,一天的烦恼,疲惫、不开心都没有了。吃完晚饭,老婆抱着孩子喂奶,要我给宝宝洗口水布、洗毛巾、洗衣服……

    老婆叨叨说了好一会,天啦,我完全蒙了。不但洗的衣服多,还要按照顺序洗,先洗口水布、再洗毛巾、接下来洗上衣、再洗裤子……瞬间奔溃。

    在我辛劳的工作下,好不容易花了半个多小时,自认为已经很完美的洗好了所有衣服,结果发现袜子忘记洗了。结果又被是一顿叨叨。

    虽然心里不服气,我也没说什么。但是对于一个技术屌丝来说,总会忍不住想有没有办法从技术的角度来解决这样的问题。接着我就在电脑上模拟了一下洗衣服这个过程。

    首先来看看正常情况下不出错的洗衣服是这样的。严格按照步骤一步步来。

    /// <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();

    后来仔细想想,其实洗衣服的过程是稳定不变的,都是按照一定的顺序来做。但是具体的细节却有不同,有可能洗衣服的人不同,洗衣服用的盆不一样等等。但是对于宝宝来说,只要把衣服洗了就行,他不管你如何实现,怎么做。按照设计模式的思想,这或许就是最简单的创建者模式。

    创建者模式定义:将一个复杂对象的构建与它的表示相分离,使得同样的构建过程可以创建不同的表示。

     

    image

    参考:《设计模式》、《设计模式解析》、《大话设计模式》

    本人是菜鸟,水平极为有限,有很多不足的地方,请大家批评赐教,感激不尽。

  • 相关阅读:
    AppiumForWin安装
    AppiumForMac安装2
    AppiumForMac安装1
    在MacOS安装puppeteer
    puppeteerExamples
    为什么总有target=_blank?
    Canvas 与 SVG
    HTML5+CSS3兼容收藏夹
    html 5 读取本地文件API
    【Web Audio API】 — 那些年的 web audio
  • 原文地址:https://www.cnblogs.com/adamqq/p/4960685.html
Copyright © 2011-2022 走看看