• 一个笑话想起的抽象


       把大象放在放在冰箱里需要几步? 这个笑话不知道是谁创作的,但是确实是赵本山老师让它红遍大江南北,长城内外。今天突然想起了这个笑话,就那它娱乐一下。 好吧,现在就开始吧。
       
    现在需求来了,写个程序,把大象放在冰箱里。把大象放在冰箱里需要几步?1,把冰箱门打开,2,把大象放在冰箱里,3,把冰箱门关上。这是整个程序的业务逻辑。
      
    先写一个接口吧
      
    Public interface 大象放在冰箱里
      
    {

       Void把冰箱门打开();

       Void把大象放在冰箱里();

       Void把冰箱门关上();
      
    }
       
    这个接口,有什么用,和笑话一样可笑,有了它就可以大象放在冰箱里吗?当然不能,但是有了它,可以让我们写的程序更加的优雅(从外观上说),更加的弱化依赖(从结构上说),更加的可扩展(从功能上说),更加......(可以baidu一下找到好的形容词)

       把客户端程序写了吧
      
    Public class BBL
      
    {
       
     Private大象放在冰箱里 _大象放在冰箱里
        
    Public BBL(大象放在冰箱里 (小写)大象放在冰箱里)
        {
          This._ _大象放在冰箱里 = (小写)大象放在冰箱里
       
    }
        
    Public void Action ()
        
    {

      _大象放在冰箱里. 把冰箱门打开();

      _大象放在冰箱里. 把大象放在冰箱里();

     _大象放在冰箱里.把冰箱门关上()

    }

    }

     

    好了根据现在的需求能写的都写了,我们等待进一步客户的需求。

    需求来了,大象要活的。可以不计其他成本。写点业务逻辑实现吧。

    Public Class 方案一:大象放在冰箱里

    {

         Public Void  把冰箱门打开()

    {

       联系青岛海尔让他们作个大冰箱;

    冰箱到货;

       联系江南重工让他们给我们作个打开冰箱门的工具;

       工具到货;

       打开门;

    }

    Public Void把大象放在冰箱里()

    {

       联系农产品让他们提供大量的香蕉;

       把香蕉放在冰箱里;

       让大象看到冰箱里的香蕉;

       等待大象自己走到冰箱里;
    }

    Public Void把冰箱门关上()
    {
       利用工具关上冰箱们
    }
    }

     

    好的,业务逻辑实现写完了,我们 做最后一步吧写运行的程序。

     

    Public  static void Main()
        
    {     
          
     BBL bll = new BBL (new方案一());
           
    bll. Action();

     }

     

    大功告成了 项目结束了? 如果需求没有变化。但是需求没有变化,简直比中奖还难。

     

    新需求来了。要控制成本,大象不管死活。只要放在冰箱里就行了。下面的情况通常是

    **%%@@@?? 抽象出来就是两个字 “骂街”。但是活还是要干的。 重新实现业务逻辑

     

    Public Class 方案二:大象放在冰箱里
       
    {
           
    Public    Void  把冰箱门打开()
           
    {

       联系苏宁电器让他们运N冰箱;

    冰箱到货;

       叫人;

       打开N个门;

    }

    Public Void把大象放在冰箱里()

    {

       联系 兽医;

       兽医杀死 大象;

       联系屠宰场;

       给大象分尸;

       把大象分装在n个冰箱里;

    }

    Public Void把冰箱门关上()

    {

       打扫现场;

       分别关上n个冰箱门();

    }

     

    }

     

    看看其他的程序 我们改了哪些地方,很幸运我们就改了一个地方

     

    Public  static void Main()

         {    

         BBL bll = new BBL (new方案二());

             bll. Action();

     }

     

    如果我们再有点时间 可以弄个反射什么的就连上面的修改页省了。只需要修改一下配置文件的键值就行了。
     
    写了这么多除了娱乐一下自己,也复习了一下,如何把业务逻辑和业务逻辑实现分开,怎样面对扩展开放面对修改关闭,以及实现依赖倒置。而这些的前提就是抽象,就是会把大象放在冰箱里。

     

  • 相关阅读:
    html5图片异步上传/ 表单提交相关
    node 常用命令
    windows下 nvm下载node被墙了解决办法
    36.迷宫(广度优先搜索)
    36.迷宫(广度优先搜索)
    35.大质数
    35.大质数
    35.大质数
    35.大质数
    35.大质数
  • 原文地址:https://www.cnblogs.com/Ontheway/p/959301.html
Copyright © 2020-2023  润新知