代码之家  ›  专栏  ›  技术社区  ›  Brandon Frohbieter

设计模式-建造住宅

  •  0
  • Brandon Frohbieter  · 技术社区  · 14 年前

    我的计划是给我建很多房子。每个住宅的规范都基于定义的蓝图,并且每个住宅都必须按照特定的顺序构建。我想我会有一个建筑工人。这帮人无所不能,

     class crew
    
        blueprint     
    
        fn frame_house
            fn get_wood
              fn_drive_to_store
            fn do_framing
            get_wood
            do_framing
    
        fn carpet_house
            fn buy_carpet
            fn install carpet 
            buy_carpet
            do_framing
    
     -
    

    然后我可以给他们一堆蓝图告诉他们去工作。。。

    each blueprint
      laborers = new crew(blueprint)
      laborers.frame_house
      laborers.carpet_house
    -
    

    还是我想让我的工人更具体?

    class FrameCrew inherits Crew
          fn get_wood
            fn drive_to_store
          fn do_framing
            get_wood
            do_framing
    -
    

    然后我就可以。。。。

    foreach blueprint
       #send crews to work with the blueprint
    

    或者我可以让他们在一个既有蓝图又有施工员充当工头的项目中?

    class Project
    
       blueprint
    
       fn construct
          #create and deploy crews
    
       class FrameCrew
       class CarpetCrew
    

    然后把每个蓝图都投射出来。

      -
       - 
        -
         - 
          - 
    
      -
       - 
        - 
         -
          - 
    
     -
     -
    

    每个内部函数依赖于它之前的函数的完成和结果,而不需要真正地完成每个任务一次以上(不需要一个home框架两次)。对我来说,这看起来和程序风格没有太大的不同,只是我在不同的地方定义和调用函数,这看起来像是额外的工作。我想问一下,是否有一种方法来构建一个面向对象的系统,它在程序系统上提供决定性的优势(组织、易用性、灵活性等)?我对这件事很困惑。我以程序化的方式启动了这个程序,它很快变得非常可怕。我开始用面向对象的方式(这可能是我糟糕的想法)重新设计它,但它看起来仍然是同样的可怕。如果有人能就如何以更易于管理的方式组织这些项目提出任何建议,我将不胜感激。

    布兰登

    1 回复  |  直到 14 年前
        1
  •  1
  •   djna    14 年前

    我认为良好的面向对象设计是一种使周围结构变得丑陋/复杂的方法。然而,如果一个问题复杂,那么你就不能指望摆脱复杂,只需更好地管理它。

    有些方面,如单一责任原则,允许你分解问题。因此,通过将框架工作与地毯工作分开,您将获得一个胜利,因为每一部分都更容易理解,但好的过程代码也可以实现这一点。

    面向对象的东西往往在两个方面变得更有趣。首先有更好的结构技术。类有自然信息隐藏,我们有私有数据和方法。所以建造房子的细节就隐藏在这个类里面。你可以用过程语言来实现这些目标,但通常需要付出很大的努力。

    在未来的灵活性和可维护性中,OO的总体收益往往会出现。