八月五号,星期二,天气晴,心情:小激动
这一天,在实现完功能之后,我就去想怎么样实现解耦合,同时让我的过程尽量做到面向对象,在查找资料和询问的过程中,给出我同一个答案就是:策略模式!当时自己的小心脏,扑腾扑腾跳动了一下,策略模式!!我可以吗!!在师哥的鼓励下,你去试试,慢慢的建立自信。于是乎,自己拿起了笔和一张纸,画了画自己的思路,给师哥看了看,结果很显然:我被否定了!
主要原因:第一:自己对策略模式不了解,尽管做过一边。第二:自己很死板,只是再扣字眼儿。没有从宏观上来看。
所以最终自己又画了一张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层看起来简单了,根据不同用户,来实现策略模式,策略模式本来就设计模式中的行为模式,行为是不同对象,同样的需求,但是每个对象的算法确实有所不同,正是这样诞生了策略模式。策略模式就是一种第一一系列的算法的方法,从概念上,所有这些算法完成的工作时相同的,但是只是实现不同,他可以以相同的方式调用所有的算法,减少了各种算法类与是用算法类之间的耦合。
就先这个机房收费系统的下机,不管是临时用户,还是固定用户,他们都要完成相同的一个任务,下机结账,只不过就是结账的方法有所不同而已。但是这样做确实也违背了面向对象的开闭原则,如果我要再增加一个算法呢,工厂中就要再加一个判断,有舍有得,看最小的成本。
实现了这段代码,感觉好开心,我已经爱上了编程,通过这次敲机房收费系统,让我感觉编程真的挺神奇的,挺好玩的一件事情,让我的自信心也逐渐的建立了起来!!继续探索未知的“世界”!!