简单工厂和策略模式_21680002工厂模式

简单工厂和策略模式_21680002工厂模式简单工厂加策略模式的应用

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺


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


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


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


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


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


简单工厂和策略模式_21680002工厂模式


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


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


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


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


肉白卡:

            哦哦哦!你们那黑心的老板、快给我讲讲、最近我们学校正让做机房收费系统、上下机有好几种算法、搞得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 Property

End 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 Function
End 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 Function
End 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 Function

End 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 Function

End 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

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


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


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


            老板、我做好了、你看            简单工厂和策略模式_21680002工厂模式


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



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



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

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



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


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













版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/194777.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • SDIO WIFI_主板usb接口没反应

    SDIO WIFI_主板usb接口没反应SDIO接口的WIFI:1、WIFI是一个sdio卡设备2、具备wifi功能SDIO接口的WIFI驱动就是在WIFI外面套上一个SDIO驱动的外壳SDIO部分代码结构:drivers/mmc下有mmc卡、sd卡、sdio卡驱动。|-mmc||-card//因为记忆卡都是块设备,当然需要提供块设备的驱动程序,这部分是实现将你的SD卡如何实现为块设备的||-core//是整个MMC的核心存,

  • 接口测试面试题及答案(最新java面试题及答案)

    接口测试面试题及答案(最新java面试题及答案)Http与Https的区别:Http与Https的区别:HTTP的URL以http:// 开头,而HTTPS的URL以https:// 开头HTTP是不安全的,而HTTPS是安全的HTTP标准端口是80,而HTTPS的标准端口是443在OSI网络模型中,HTTP工作于应用层,而HTTPS的安全传输机制工作在传输层HTTP无法加密,而HTTPS对传输的数据进行加密HTT…

  • hp中国区总裁孙振耀职场圣经

    hp中国区总裁孙振耀职场圣经

  • 微信小程序–电池容量、电池剩余电量样式

    微信小程序–电池容量、电池剩余电量样式效果如图所示:竖列的我用的旋转横列90度实现的wxml:<viewclass=”complex”><viewdata-charge=’0’class=”battery”></view><viewdata-charge=’1’class=”battery”></view><viewdata-charge=’2’class=”battery”></view&gt…

  • oracle怎么使用触发器,oracle触发器使用[通俗易懂]

    oracle怎么使用触发器,oracle触发器使用[通俗易懂]2)触发器分类:1.DML触发器:创建在表上,由DML事件引发2.insteadof触发器:创建在视图上并且只能在行级上触发,用于替代insert,delete等操作(由于oracle中不能直接对有两个以上的表建立的视图进行DML操作,所以给出替代触发器,它是专门为进行视图操作的一种处理方法)3.DDL触发器:触发事件时数据库对象的创建和修改4.数据库事件触发器:定义在数据库或者模式上,由…

  • [排序算法]–冒泡排序的三种实现(Java)

    [排序算法]–冒泡排序的三种实现(Java)冒泡排序是非常好理解的,以从小到大排序为例,每一轮排序就找出未排序序列中最大值放在最后。设数组的长度为N:(1)比较前后相邻的二个数据,如果前面数据大于后面的数据,就将这二个数据交换。(2)这样对数组的第0个数据到N-1个数据进行一次遍历后,最大的一个数据就“沉”到数组第N-1个位置。(3)N=N-1,如果N不为0就重复前面二步,否则排序完成。以上就是冒泡排序的基本思想,按照这个定义很快就能写

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号