故事
啊------- = 0 = 打了个哈气、这一觉睡的浑身酸疼、哎呦……我的脖子、要是能做个SPA就美滋滋了、嘿嘿、遥!遥呢!我要做SPA!
媛:她出去了、
我:干嘛去了?
媛:不知道啊……
我:啪--!………我的手狠狠的拍了下桌子、擅自离职!那我的SPA谁来做?我还想吃章鱼烧呢!
媛:主人、您忘了你上次学了抽象工厂、突发奇想、为了避免这种情况已经想好了解决方案。
我:纳尼?看来我真是又聪明又帅、说说我弄了啥方案?
媛:为了避免您需要服务的时候找不到人、您已经让遥吧做SPA的步骤方法、和做章鱼丸的步骤方法都写好了、我们只要看着方法做、也能给您做SPA和章鱼丸、不过因为我们不是遥、所以SPA的舒适度和章鱼丸的味道可能会不一样。
我:好就这么办!今天你做、明天交悦也试试、看看你们谁弄得好、还有你过来
摸头ing…………摸头ing…………摸头ing…………摸头ing…………
UML图:
讲解:
如果类A依赖类B、如果类B不在了、或者损坏丢失那A类怎么办???也不能用了、那调用A类的类呢?咋办?也不能用了、那调用-调用A类的类的类呢………………嘿嘿、如果定义好接口、A类调用一个I接口、只要有类实现类这个接口、实现接口的类坏掉了、再写一个或者换一个类嘛、只要实现了I接口、A类照样能用。
文中的遥不在、理论上我就不能做SPA和吃章鱼丸了、但是我事先叫遥写了这两件事的流程、也就是接口类、所以媛和悦按照这个流程、也就是接口做、就能完成这两件事。
代码
<span style="font-size:18px;">Public Class Form1
'章鱼接口
Public Interface IOctopus
Function Ieat() As String '被吃方法
End Interface
'媛-做章鱼烧的类
Public Class yuanOctopus : Implements IOctopus
Public Function Ieat() As String Implements IOctopus.Ieat
Return "我在吃--媛--做的章鱼烧、好难吃!"
End Function
End Class
'悦-做章鱼烧的类
Public Class yueOctopus : Implements IOctopus
Public Function Ieat() As String Implements IOctopus.Ieat
Return "我在吃--悦--做的章鱼烧、很美味!"
End Function
End Class
'按摩接口
Public Interface ISPA
Function ISPA() As String '按摩方法
End Interface
'媛-做按摩的类
Public Class yuanSPA : Implements ISPA
Public Function ISPA() As String Implements ISPA.ISPA
Return "媛--左捏捏右捏捏--给我做SPA"
End Function
End Class
'悦-做按摩的类
Public Class yueSPA : Implements ISPA
Public Function ISPA() As String Implements ISPA.ISPA
Return "悦--把我弄到一个浴缸里---给我做SPA"
End Function
End Class
'女仆工厂接口
Public Interface IMaid
Function IMakeOctopus() As IOctopus '做章鱼烧
Function IMakeSPA() As ISPA '做SPA
End Interface
'媛工厂
Public Class YUAN : Implements IMaid
'媛做章鱼烧
Public Function IMakeOctopus() As IOctopus Implements IMaid.IMakeOctopus
Return New yuanOctopus
End Function
'媛做SPA
Public Function IMakeSPA() As ISPA Implements IMaid.IMakeSPA
Return New yuanSPA
End Function
End Class
'悦工厂
Public Class YUE : Implements IMaid
'悦做章鱼烧
Public Function IMakeOctopus() As IOctopus Implements IMaid.IMakeOctopus
Return New yueOctopus
End Function
'悦做SPA
Public Function IMakeSPA() As ISPA Implements IMaid.IMakeSPA
Return New yueSPA
End Function
End Class
'媛
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim yuan As IMaid = New YUAN
Label2.Text = yuan.IMakeOctopus.Ieat '章鱼烧文字
Label3.Text = yuan.IMakeSPA.ISPA 'SPA文字
End Sub
'悦
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Dim yue As IMaid = New YUE
Label2.Text = yue.IMakeOctopus.Ieat '章鱼烧文字
Label3.Text = yue.IMakeSPA.ISPA 'SPA文字
End Sub
End Class
</span>
效果图
优点:
便于交换产品系列、只要定了接口、这个女仆那个女仆都能实现、换一个人也能把事办了
类的具体过程与客户端分离、还是那个我与章鱼丸和SPA解耦、我不会但是我知道两个女仆会弄就行了
缺点:
要是再加一个脚底按摩呢?就要加一个脚底按摩的接口、改下工厂接口、并且每个工厂的实现类都要写、我去== 世界末日!
改缺点……
--明天在写、简单工厂+抽象工厂- -
————————————直接把设计模式写成chenchen后宫传的了……————————————
—————————chenchen—————————