• 设计模式之工厂模式读后感


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

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

    初学者代码:

    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,这产生了新的模式

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

  • 相关阅读:
    Learning_the_bash_Shell_Third_Edition 15/n
    Learning_the_bash_Shell_Third_Edition 14/n
    Learning_the_bash_Shell_Third_Edition 13/n
    cvb源码分析,resful规范,drf,drf序列化组件,95
    rest_framework登录组件,权限组件
    forms组件
    分页器
    基于ajax提交数据
    回顾django内容
    多表操作
  • 原文地址:https://www.cnblogs.com/apiter/p/1851071.html
Copyright © 2020-2023  润新知