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

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

  • 相关阅读:
    黑盒测试用例输入:等价类划分方法
    jar包/class文件如何快速反编译成java文件
    html表格单元格添加斜下框线的方法
    Linux常用命令操作文档
    压力、负载、性能测试工具总结(持续更新。。。)
    压力测试、负载测试及性能测试异同
    Mac os x安装IDEAL及配置JDK和Maven
    RMQ问题总结,标准RMQ算法的实现
    [c++ IO加速]快速输入输出
    [coj 1353 Guessing the Number]kmp,字符串最小表示法
  • 原文地址:https://www.cnblogs.com/apiter/p/1851071.html
Copyright © 2011-2022 走看看