简单工厂+策略模式-上

来源:互联网 发布:三角形软件测试报告 编辑:程序博客网 时间:2024/06/07 10:30


            这次写了一个简单工厂加策略模式、写的糊里糊涂的、主要实现了这么个功能、输入相应的字符串、输入相应的几个数、自动选择算法。以后到上下机、是想输入时间和相应的数据、自动算出相应的钱数。


            故事:富兰克林去黑煤窑干苦力哭、嘿咻、嘿咻、累了一天又一天、节假日也不休息、富兰克林跟老板说、老板你每天让我干活23小时惊恐、才给那么点、而且节假日也不给个加班费啥的、龟YEYE不干了= =发火


            老板怕小龟龟走、没人给他拉煤、就给小龟龟出了道难题疑问、如果你能用简单工厂和策略模式写出一个能根据每小时钱数、和小时数算工资的软件、对了、节假日还要有特殊的加成、一点按钮就能算出来、我就按你说的给工钱得意


            富兰克林:你妹啊、搞IT的就好好搞IT、挖煤作甚发火、好在龟YEYE学过Design pattern、等着Give Money吧!得意


            经过三天三夜的奋战、富兰克林终于画出了UML图、他找到了搞IT的肉白卡、肉白卡肉白卡、快来看看、这图咋样!生气




————————羡慕哇塞!!!


————————看不懂= =害羞


富兰克林说:@¥#%……#¥@……


(要想知道富兰克林说的是什么、请重新阅读图片前面的内容——)


肉白卡:

            哦哦哦!你们那黑心的老板、快给我讲讲、最近我们学校正让做机房收费系统、上下机有好几种算法、搞得GU-NAI-NAI头晕目眩的、看你这个好像能用的上、说说吧!


富兰克林:

            看UML图、首先 你要知道有、工厂类、侧略类、算法的抽象类、和算法类


            抽象算法类:有一个计算金额的抽象方法、而继承他的子类、也就是实际的算法类重写他的功能、这里我还加入了构造方法、构造方法就是接受要计算的数值、算法1的类是接受2个、算法2的类是接受3个。


            策略类:这个类主要有2个方法、一个是传入具体算法类、这里声明了抽象算法类、可以传入他的所有子类、传入之后用策略类声明的一个抽象算法接受、第二个方法使用这个算法类的计算方法、返回算数结果。


            工厂类:这个其实就是根据传入的字符串、判断到底实例化哪个计算类、省去了客户端手动NEW类、客户端不用知道实现方式、只要知道想要什么、就跟工厂类说就可以了、工厂类有2个构造方法、一个能接受2个int型的数字、另一个能接受3个int型的数字、分别满足2个算法类计算需要的数字。

富兰克林:小肉肉你懂了没大笑


肉白卡:没懂………………


富兰克林:尴尬你不是搞IT的吗?


肉白卡:            

            哎…………还高IT的呢、马上就要挨踢了、正所谓一瓶子不满半瓶子晃荡、机房收费系统上下机弄不出来、我还当什么程序员、还是回去弹GT吧- -


富兰克林:

            小白就是小白、这样吧我把源码给你、你回去研究下、下次去你对象那吃饭、记得打1折!

肉白卡:1折?!那直接请你好了!发火


富兰克林:好的大笑马上给你代码



''' <summary>''' 算法抽象列(CashAlgorithm现金算法)''' </summary>''' <remarks></remarks>Public MustInherit Class CashAlgorithm    ''' <summary>    ''' 算现金的抽象方法    ''' </summary>    ''' <returns></returns>    ''' <remarks></remarks>    Public Overridable Function countMoney() As Integer    End Function    '必须被重写    'Public Overrides Sub Move(ByVal NewX As Integer, ByVal NewY As Integer)    '    '...    'End Sub    'Public Property XPos() As Integer    '    '...    'End PropertyEnd Class''' <summary>''' 算法1 正常工资''' </summary>''' <remarks></remarks>Public Class CashOne    '继承抽象类    Inherits CashAlgorithm    Dim _workTime As New Integer    Dim _hourMoney As New Integer    ''' <summary>    ''' 构造函数(因为每个算法有可能传入值不一样)    ''' </summary>    ''' <param name="workTime"></param>    ''' <param name="hourMoney"></param>    ''' <remarks></remarks>    Sub New(workTime As Integer, hourMoney As Integer)        ' TODO: Complete member initialization         _workTime = workTime        _hourMoney = hourMoney    End Sub    ''' <summary>    ''' 正常工资的算法    ''' </summary>    ''' <returns></returns>    ''' <remarks></remarks>    Public Overrides Function countMoney() As Integer        Dim money As Integer '定义存放钱的变量        money = _workTime * _HourMoney * 1 '正常工资        Return money '返回计算结果    End FunctionEnd Class''' <summary>''' 算法2 节假日工资算法''' </summary>''' <remarks></remarks>Public Class CashTwo    '继承抽象类    Inherits CashAlgorithm    Dim _workTime As New Integer    Dim _hourMoney As New Integer    Dim _addMoney As New Integer    ''' <summary>    ''' 构造函数(因为每个算法有可能传入值不一样)    ''' </summary>    ''' <param name="workTime"></param>    ''' <param name="hourMoney"></param>    ''' <remarks></remarks>    Sub New(workTime As Integer, hourMoney As Integer, addMoney As Integer)        ' TODO: Complete member initialization         _workTime = workTime        _hourMoney = hourMoney        _addMoney = addMoney    End Sub    ''' <summary>    ''' 节假日工资的算法    ''' </summary>    ''' <returns></returns>    ''' <remarks></remarks>    Public Overrides Function countMoney() As Integer        Dim money As Integer '定义存放钱的变量        money = _workTime * _hourMoney + _addMoney '这里是正常工资的2倍        Return money '返回计算结果    End FunctionEnd Class''' <summary>''' 策略模式类''' </summary>''' <remarks></remarks>Public Class CashContext    Private insideCashAlgorithm As CashAlgorithm '声明一个算法抽象类    ''' <summary>    ''' 构造方法、接受外部传入的算法类(这里声明抽象算法类、使用他的子类、也就是策略)    ''' </summary>    ''' <param name="outSideCashAlgorithm"></param>    ''' <remarks></remarks>    Public Sub CashContext(outSideCashAlgorithm As CashAlgorithm)        insideCashAlgorithm = outSideCashAlgorithm    End Sub    ''' <summary>    ''' 使用接受算法的方法、计算出money返值    ''' </summary>    ''' <returns></returns>    ''' <remarks></remarks>    Public Function countMoney() As Integer        Return insideCashAlgorithm.countMoney()    End FunctionEnd Class''' <summary>''' 简单工厂类''' </summary>''' <remarks></remarks>Public Class CashFactory    Dim fCashContext As New CashContext '定义策略    Dim _workTime As New Integer    Dim _hourMoney As New Integer    Dim _addMoney As New Integer    Dim _str As String    '《构造函数****************************************************    '让工厂类可以传入葛总不同的值    ''' <summary>    ''' 正常上班传入值构造方法    ''' </summary>    ''' <param name="str">选择要素string类型  正常上班or假日上班</param>    ''' <param name="workTime">工作时间 int型</param>    ''' <param name="hourMoney">小时/钱  int型</param>    ''' <remarks></remarks>    Sub New(str As String, workTime As Integer, hourMoney As Integer)        ' TODO: Complete member initialization         _workTime = workTime        _hourMoney = hourMoney        _str = str    End Sub    ''' <summary>    ''' 假日上班传入值构造方法    ''' </summary>    ''' <param name="str">选择要素string类型  正常上班or假日上班</param>    ''' <param name="workTime">工作时间 int型</param>    ''' <param name="hourMoney">小时/钱  int型</param>    ''' <param name="addMoney">加班费 int型</param>    ''' <remarks></remarks>    Sub New(str As String, workTime As Integer, hourMoney As Integer, addMoney As Integer)        ' TODO: Complete member initialization         _workTime = workTime        _hourMoney = hourMoney        _addMoney = addMoney        _str = str    End Sub    '构造函数****************************************************》    ''' <summary>    ''' 计算钱、选择算法、运算并返回结果    ''' </summary>    ''' <returns></returns>    ''' <remarks></remarks>    Function CountMoney() As Integer        Select Case (_str)            Case "正常上班"                fCashContext.CashContext(New CashOne(_workTime, _hourMoney))            Case "假日上班"                fCashContext.CashContext(New CashTwo(_workTime, _hourMoney, _addMoney))            Case Else                MsgBox("未找到相应算法策略")        End Select        Return fCashContext.countMoney() '计算法返回结果    End FunctionEnd Class ' 客户端 ''' <summary>    ''' 正常上班    ''' </summary>    ''' <param name="sender"></param>    ''' <param name="e"></param>    ''' <remarks></remarks>    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click        Dim cashFactory As New CashFactory(Button1.Text, txtTime1.Text, txtMoney2.Text)        MsgBox(cashFactory.CountMoney())    End Sub    ''' <summary>    ''' 假日上班    ''' </summary>    ''' <param name="sender"></param>    ''' <param name="e"></param>    ''' <remarks></remarks>    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click        Dim cashFactory As New CashFactory(Button2.Text, txtTime1.Text, txtMoney2.Text, txtAddMoney.Text)        MsgBox(cashFactory.CountMoney())    End Sub






肉白卡:好的大笑、搞好了请你吃龙虾!


富兰克林:羡慕好啊!!!说定了


第二天………………………………


            老板、我做好了、你看            


            正常上班输入工作时间和每小时工资点击正常上班就可核算工资、二假日上班在输入工作时间和每小时工资的基础上、输入假日补贴、点击假日上班就可以啦!疑问



            恩!很好、老板摸了富兰克林的龟头说道、小伙子、前途无量嘛!以后咱们黑煤窑、啊不是、咱们光明煤窑就用你这个软件算工资了!



            只见公司老板输入了1 23 1这几个数字………点了2下出现了23 和24两个数字………………恩恩!!!卜错卜错O(∩_∩)O~



            富兰克林:疑问惊讶惊恐大哭发火敲打再见



—————————————————这次博客信息量有点多—————————————————


——————————chenchen——————————














1 0
原创粉丝点击