我想我已爱上你——下机之策略模式(二)

        八月五号,星期二,天气晴,心情:小激动

        这一天,在实现完功能之后,我就去想怎么样实现解耦合,同时让我的过程尽量做到面向对象,在查找资料和询问的过程中,给出我同一个答案就是:策略模式!当时自己的小心脏,扑腾扑腾跳动了一下,策略模式!!我可以吗!!在师哥的鼓励下,你去试试,慢慢的建立自信。于是乎,自己拿起了笔和一张纸,画了画自己的思路,给师哥看了看,结果很显然:我被否定了!

       主要原因:第一:自己对策略模式不了解,尽管做过一边。第二:自己很死板,只是再扣字眼儿。没有从宏观上来看。

      所以最终自己又画了一张UmLL图,理了一下自己的思路!

                                                             


       这个就是自己在更改之后的一个图,根据书上的实例,和自己的想法,最后再写代码的时候,发现我还是需要在U层进行判断是临时用户还是固定用户,然后这时候书上有讲到策略模式+简单工厂。这样就把判断移除了U层,而是在工厂中进行的了。以下便是自己的实现的代码:


        八月7号,星期四,天气晴朗,凉爽,心情:倍儿爽,倍儿开心


策略类:

Public MustInherit Class Consume
    Public MustOverride Function coutMoney(ByVal cardcon As CardConsume, ByVal type As String) As Double
End Class

策略+简单工厂

'用来外界调用抽象类中德方法 简单工厂与策略模式相结合
Public Class ResultMoney
    '实例化?????
    Dim co As Consume
    Public Function ResultMoney(ByVal type As String) As Object
        Select Case type
            Case "固定用户"
                Dim co1 As New FixedCustomer
                co = co1
            Case "临时用户"
                Dim co2 As New TemperCustomer
                co = co2
        End Select
        Return co
    End Function

    '通过不同的参数,来获取不同的用户的消费的方法
    Public Function GetMoney(ByVal cardcon As CardConsume, ByVal type As String) As Double
        Return co.coutMoney(cardcon, type)
    End Function

U层代码

 getMoney.ResultMoney(txtType.Text)
        CMoney = getMoney.GetMoney(cardcon, txtType.Text)
        txtconMoney.Text = Format(CMoney, "0.0")

       这种方法的确让U层和B层看起来简单了,根据不同用户,来实现策略模式,策略模式本来就设计模式中的行为模式,行为是不同对象,同样的需求,但是每个对象的算法确实有所不同,正是这样诞生了策略模式。策略模式就是一种第一一系列的算法的方法,从概念上,所有这些算法完成的工作时相同的,但是只是实现不同,他可以以相同的方式调用所有的算法,减少了各种算法类与是用算法类之间的耦合。

       就先这个机房收费系统的下机,不管是临时用户,还是固定用户,他们都要完成相同的一个任务,下机结账,只不过就是结账的方法有所不同而已。但是这样做确实也违背了面向对象的开闭原则,如果我要再增加一个算法呢,工厂中就要再加一个判断,有舍有得,看最小的成本。

       实现了这段代码,感觉好开心,我已经爱上了编程,通过这次敲机房收费系统,让我感觉编程真的挺神奇的,挺好玩的一件事情,让我的自信心也逐渐的建立了起来!!继续探索未知的“世界”!!

评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值