zoukankan      html  css  js  c++  java
  • 设计模式之工厂模式读后感

    作者(大话设计模式)以生动的比喻,从简单工厂模式到工厂模式,最后到抽象工厂模式,极其美妙的描述了工厂模式。

    简单工厂模式(以一个简单的加减乘除计算器为例)

    初学者代码:

    Class Operation{
         Double a;
         Double b;
         public Double Add(){
              return a+b;
         }
         public Double Sub(){
              return a-b;
         }
         public Double Mul(){
              return a*b;
         }
    }
    
    

    这样的代码对完成当前的功能没问题,关键是在复用和扩展方面很差,如果要新增一个运算功能,只能去修改类Operation,这是违背修改封闭原则的。

    简单工厂实现:

            Public Class Operation
                Private _numA As Double
                Private _numB As Double
                Public Property NumA As Double
                    Get
                        Return _numA
                    End Get
                    Set(ByVal value As Double)
                        _numA = value
                    End Set
                End Property
                Public Property NumB As Double
                    Get
                        Return _numB
                    End Get
                    Set(ByVal value As Double)
                        _numB = value
                    End Set
                End Property
                Public Overridable Function GetResult()
                    Dim result = 0
                    Return result
                End Function
    
            End Class
    
            Public Class AddOperation
                Inherits Operation
    
                Public Overrides Function GetResult() As Object
                    Return Me.NumA + Me.NumB
                End Function
            End Class
    
            Public Class SubOperation
                Inherits Operation
    
                Public Overrides Function GetResult() As Object
                    Return Me.NumA - Me.NumB
                End Function
            End Class
    
            Public Class MulOperation
                Inherits Operation
    
                Public Overrides Function GetResult() As Object
                    Return Me.NumA * Me.NumB
                End Function
            End Class
    
            Public Class OperationFactory
                Public Shared Function CreateOperation(ByVal op As String) As Operation
                    Dim operation As Operation = Nothing
                    Select Case op
                        Case "+"
                            operation = New AddOperation
                        Case "-"
                            operation = New SubOperation
                        Case "*"
                            operation = New MulOperation
                        Case Else
                            Throw New Exception("操作参数不对")
                    End Select
                    Return operation
                End Function
            End Class
    

    这样一来,要扩展新的功能,只需要添加Operation的子类即可,而不必更改已有代码。惟独不舒服的是,要在工厂类中添加Case,这产生了新的模式

    简单工厂模式+反射+配置文件,通过配置文件读取操作类型字符串,通过反射生成相应的操作子类实例。现在代码就相当的完美的。

  • 相关阅读:
    android 多线程
    Uva 10881 Piotr’s Ants 蚂蚁
    LA 3708 Graveyard 墓地雕塑 NEERC 2006
    UVa 11300 Spreading the Wealth 分金币
    UVa 11729 Commando War 突击战
    UVa 11292 The Dragon of Loowater 勇者斗恶龙
    HDU 4162 Shape Number
    HDU 1869 六度分离
    HDU 1041 Computer Transformation
    利用可变参数函数清空多个数组
  • 原文地址:https://www.cnblogs.com/apiter/p/1851071.html
Copyright © 2011-2022 走看看