【问题标题】:Use prototype pattern or not是否使用原型模式
【发布时间】:2011-10-28 06:39:14
【问题描述】:

我有一个问题。我需要创造一些与产品有关的小东西。现在我可以说 7 种不同类型的产品。有些是其他人的子类型,例如

Cars
 - Vans
   - petrol
   - diesel
 - City
 - Hatchback
 - Saloon
 - Estate
   - petrol
   - diesel

现在,为了争论,我所有的城市车、掀背车和轿车都是混合动力/汽油/什么的,我不打算出售汽油和柴油车。然而,我有可能在未来的某个时候拥有汽油和柴油轿车,但我不会拥有 20 多种类型的产品。如果它要上涨,我可能会有 2-3 种类型。

据我了解Prototype Pattern 在这里可能是一个不错的选择,因为我将能够避免房地产-> 汽油和面包车-> 汽油之间的重复......但是再一次,面包车将具有与城市汽车不同的特性,例如最大装载尺寸。

我一直在广泛阅读有关设计模式的内容,我记得很清楚的一件事是在不需要时不要使用模式。现在的问题是 - 我需要它吗?

谢谢!

【问题讨论】:

    标签: php design-patterns prototype-pattern


    【解决方案1】:

    装饰器模式可能是最直接的一种使用方式,并且可以很好地扩展具体对象的功能和/或特性。

    这里有一些简单的阅读:Head First Design Patterns - CH3 pdf

    仅供参考,无论您选择哪种语言,都必须具备学习和参考设计模式的能力:

    1)Head First Design Patterns

    2)Patterns for Enterprise Application Architecture

    3)Design Patterns: Elements of Reusable Object-Oriented Software

    和网站:

    1)DoFactory

    2)StackOverflow Design Patterns Newbie

    还有一些,我得把它们挖出来。

    【讨论】:

    • 感谢您的回答,但是我不想扩展对象的功能,因为它将在整个运行时设置,但我想以不同于直接继承的方式对类进行建模.
    • 不管我接受这个答案,因为它有很好的链接到有价值的资源:)
    【解决方案2】:

    每种类型的汽车是否需要不同的行为?汽油货车与柴油货车的行为不同?轿车必须表现不同于庄园?

    如果我理解正确,你需要这样的东西

    public enum FuelType
    {
         Petrol,
         Diesel
    }
    
    public class Car
    {
       public string Name {get;set;}
       public FuelType Fuel {get;set;}
    }
    
    public class Van:Car { } 
    public class CityCar:Car { }
    

    如果 Van 的特征只是与 Car 不同的值,则不需要子类化,只需更改属性值即可。例如,Van 应该具有其他属性或不同的方法实现才能有资格进行子类化。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-28
      相关资源
      最近更新 更多