大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
这次写了一个简单工厂加策略模式、写的糊里糊涂的、主要实现了这么个功能、输入相应的字符串、输入相应的几个数、自动选择算法。以后到上下机、是想输入时间和相应的数据、自动算出相应的钱数。
故事:富兰克林去黑煤窑干苦力、嘿咻、嘿咻、累了一天又一天、节假日也不休息、富兰克林跟老板说、老板你每天让我干活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 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
肉白卡:好的、搞好了请你吃龙虾!
富兰克林:好啊!!!说定了
第二天………………………………
老板、我做好了、你看
正常上班输入工作时间和每小时工资点击正常上班就可核算工资、二假日上班在输入工作时间和每小时工资的基础上、输入假日补贴、点击假日上班就可以啦!
恩!很好、老板摸了富兰克林的龟头说道、小伙子、前途无量嘛!以后咱们黑煤窑、啊不是、咱们光明煤窑就用你这个软件算工资了!
只见公司老板输入了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账号...