亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? factory with .net(design pattern).txt

?? 一些關于UML的經典討論
?? TXT
字號:
Factory with .NET(Design Pattern)

http://www.shecn.com/best/g14/g840.htm


顧名思意﹐樣式是人們遭遇到特定問題時﹐大家慣用的應付方式。樣式可用來解決問題﹐而且是有效、可靠的。掌握愈多樣式﹐運用愈成熟﹐就愈是傑出的設計專家。
依據樣式理論大師亞歷山大(Christopher Alexander) 之定義﹕

「樣式是某外在環境(Context) 下﹐對特定問題(Problem)的
慣用解決之道(Solution)」

例如﹐在平坦的校園裡(Context) ﹐下述兩項需求是互相衝突的﹕
◎學生需要交通工具代步。
◎校園空氣必須保持清潔。

就產生問題(Problem) 了﹐該如何化解呢﹖在一般校園裡﹐慣用解決之道(Solution)是﹕規定在校園中只能騎自行車﹐不能騎有污染的機車和汽車。此解決之道是否有效﹐是取決於外在環境(Context) 。例如﹐在不平坦的清華大學校園中﹐上述解決之道就無效用了。於是另找解決方案來處理這問題了﹔例如﹐提供電動機車供學生在校園中使用。
自從1991年以來﹐亞歷山大的樣式理論逐漸應用於OO軟體的設計上﹐可解決軟體設計上的問題。例如﹐軟體設計時﹐常見下述問題﹕

◎ 為了提昇軟體的柔性和活力,軟體必須元件化。
◎ 軟體元件之間的相依性常太高﹐不易個別抽換元件﹐
軟體的「軟」性就降低了。

可利用樣式解決這種問題﹐求增強元件之間的獨立性﹐提高軟體的彈性(Flexibility) ﹐降低軟體的維護費用﹗為了解決類似的軟體設計問題,Erich Gamma等人合著的書籍﹕
"Design Patterns: Elements of Reusable Object-Oriented Software"

一書列出23種軟體設計樣式(Design Pattern)﹐可解決軟體設計上的特定問題。於此介紹Gamma的Factory樣式。首先拿個簡單程式來敘述「問題」之所在﹕

'ex01.bas
Imports System.ComponentModel
Imports System.Drawing
Imports System.WinForms
'----------------------------------------------------
Class Int
Private value As Integer
Public Sub New()
value = 100
End Sub
Public Sub DisplayValue()
MessageBox.Show("value = " + str(value))
End Sub
End Class
'-----------------------------------------------------------
Public Class Form1
Inherits System.WinForms.Form

Public Sub New()
MyBase.New()
Form1 = Me
'This call is required by the Win Form Designer.
InitializeComponent()
'TODO: Add any initialization after the InitializeComponent() call
End Sub
'Form overrides dispose to clean up the component list.
Public Overrides Sub Dispose()
MyBase.Dispose()
components.Dispose()
End Sub
#Region " Windows Form Designer generated code "
......
#End Region
Protected Sub Form1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
Dim pi As Int
Pi = New Int()
pi.DisplayValue()
End Sub
End Class

此程式輸出:
value = 100

兩類別的相依性很高﹐原因是﹕Form1類別裡的指令-----
Dim pi As Int
Pi = New Int()

直接使用到Int字眼﹐且使用兩次。於是﹐問題是﹕
「若必須將Int類別名稱改為Float時﹐得更換Form1類別中的Int字眼」。

亦即﹐抽換Int類別時﹐會牽連到Form1類別﹐抽換過程將不會很順暢﹗藉由抽象類別﹐可解決部分問題﹕

'ex02.bas
Imports System.ComponentModel
Imports System.Drawing
Imports System.WinForms
'---------------------------------------------------------
Class Data
Public Overridable Sub DisplayValue()
End Sub
End Class

Class Int
Inherits Data
Private value As Integer
Public Sub New()
value = 100
End Sub
Public Overrides Sub DisplayValue()
MessageBox.Show("value = " + str(value))
End Sub
End Class
Public Class Form1
Inherits System.WinForms.Form

Public Sub New()
MyBase.New()
Form1 = Me
'This call is required by the Win Form Designer.
InitializeComponent()
'TODO: Add any initialization after the InitializeComponent() call
End Sub
'Form overrides dispose to clean up the component list.
Public Overrides Sub Dispose()
MyBase.Dispose()
components.Dispose()
End Sub
#Region " Windows Form Designer generated code "
......
#End Region
Protected Sub Form1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
Dim pi As Data
pi = New Int()
pi.DisplayValue()
End Sub
End Class

此程式輸出:
value = 100

刪除掉1 個Int字眼﹐已長進些了﹐不是嗎﹖但問題尚未全部解決﹗Int字眼仍留在Form1類別內﹐還是難分難解﹗待會兒再來介紹如何解決這個難題,請先看看VB的Interface觀念能替代上述的抽象類別。例如,上述程式相當於:

'ex03.bas
Imports System.ComponentModel
Imports System.Drawing
Imports System.WinForms
'----------------------------------------------------
Interface IData
Sub DisplayValue()
End Interface

Class Int
Implements IData
Private value As Integer
Public Sub New()
value = 100
End Sub
Public Sub DisplayValue() Implements IData.DisplayValue
MessageBox.Show("value = " + str(value))
End Sub
End Class
'-----------------------------------------------------------
Public Class Form1
Inherits System.WinForms.Form

Public Sub New()
MyBase.New()
Form1 = Me
'This call is required by the Win Form Designer.
InitializeComponent()
'TODO: Add any initialization after the InitializeComponent() call
End Sub
'Form overrides dispose to clean up the component list.
Public Overrides Sub Dispose()
MyBase.Dispose()
components.Dispose()
End Sub
#Region " Windows Form Designer generated code "
......
#End Region
Protected Sub Form1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
Dim pi As IData
pi = New Int()
pi.DisplayValue()
End Sub
End Class

使用Factory樣式可解決上述問題﹗它將New Int() 指令包裝(Encapsulate) 起來﹐Int字眼就不再出現於Form1類別中了。依照Erich Gamma 書中的Factory樣式﹐應定義一個Factory類別,將Form1與Int兩類別隔開來﹐令其互相獨立﹐以利於個別抽換。樣式好像馬路的安全島或分道欄。如下程式:

'ex04.bas
Imports System.ComponentModel
Imports System.Drawing
Imports System.WinForms
'----------------------------------------------------
Interface IData
Sub DisplayValue()
End Interface

Class Int
Implements IData
Private value As Integer
Public Sub New()
value = 100
End Sub
Public Sub DisplayValue() Implements IData.DisplayValue
MessageBox.Show("value = " + str(value))
End Sub
End Class

Class Factory
Public Function CreateDataObject() As IData
CreateDataObject = New Int()
End Function
End Class
'-----------------------------------------------------------
Public Class Form1
Inherits System.WinForms.Form

Public Sub New()
MyBase.New()
Form1 = Me
'This call is required by the Win Form Designer.
InitializeComponent()
'TODO: Add any initialization after the InitializeComponent() call
End Sub
'Form overrides dispose to clean up the component list.
Public Overrides Sub Dispose()
MyBase.Dispose()
components.Dispose()
End Sub
#Region " Windows Form Designer generated code "
......
#End Region
Protected Sub Form1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
Dim pi As IData
Dim df As Factory
df = New Factory()
pi = df.CreateDataObject()
pi.DisplayValue()
End Sub
End Class

此程式輸出:
value = 100

利用Factory元件降低Form1與Int元件之間的相依性﹐令其互相獨立﹐就易於抽換。例如將Int類別更換為Real類別時,只需將Factory類別裡的指令更改如下:
Class Factory
Public Function CreateDataObject() As IData
CreateDataObject = New Real()
End Function
End Class

Form1類別裡的指令毫不受影響。前面曾經由Int而抽象出IData介面,提昇了一些彈性。所以也由Factory抽象出IFactory介面如下程式:

'ex05.bas
Imports System.ComponentModel
Imports System.Drawing
Imports System.WinForms
'----------------------------------------------------
Interface IData
Sub DisplayValue()
End Interface

Class Int
Implements IData
Private value As Integer
Public Sub New()
value = 100
End Sub
Public Sub DisplayValue() Implements IData.DisplayValue
MessageBox.Show("value = " + str(value))
End Sub
End Class

Interface IFactory
Function CreateDataObject() As Idata
End Interface

Class Factory
Implements IFactory
Public Function CreateDataObject() As IData
CreateDataObject = New Int()
End Function
End Class
'-----------------------------------------------------------
Public Class Form1
Inherits System.WinForms.Form

Public Sub New()
MyBase.New()
Form1 = Me
'This call is required by the Win Form Designer.
InitializeComponent()
'TODO: Add any initialization after the InitializeComponent() call
End Sub
'Form overrides dispose to clean up the component list.
Public Overrides Sub Dispose()
MyBase.Dispose()
components.Dispose()
End Sub
#Region " Windows Form Designer generated code "
......
#End Region
Protected Sub Form1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
Dim pi As IData
Dim df As IFactory
df = New Factory()
pi = df.CreateDataObject()
pi.DisplayValue()
End Sub
End Class

此程式輸出:
value = 100

以此類推,也能從Form1抽像出介面,但是不僅抽出程序名稱而已,還有指令,所以應該以父類別(Superclass)來表達該抽象。還因為要避開多重繼承(Multiple Inheritance),所以就將繼承改由委託(Delegation)方式表達之。如下程式:

'ex06.bas
Imports System.ComponentModel
Imports System.Drawing
Imports System.WinForms
'----------------------------------------------------
Interface IData
Sub DisplayValue()
End Interface

Class Int
Implements IData
Private value As Integer
Public Sub New()
value = 100
End Sub
Public Sub DisplayValue() Implements IData.DisplayValue
MessageBox.Show("value = " + str(value))
End Sub
End Class

Interface IFactory
Function CreateDataObject() As Idata
End Interface

Class IntFactory
Implements IFactory
Public Function CreateDataObject() As IData
CreateDataObject = New Int()
End Function
End Class
'-----------------------------------------------------------
Class Document
Private pi As IData
Public Sub New(ByVal pf As IFactory)
pi = pf.CreateDataObject()
End Sub
Public Sub DisplayValue()
pi.DisplayValue()
End Sub
End Class

Public Class Form1
Inherits System.WinForms.Form

Public Sub New()
MyBase.New()
Form1 = Me
'This call is required by the Win Form Designer.
InitializeComponent()
'TODO: Add any initialization after the InitializeComponent() call
End Sub
'Form overrides dispose to clean up the component list.
Public Overrides Sub Dispose()
MyBase.Dispose()
components.Dispose()
End Sub
#Region " Windows Form Designer generated code "
......
#End Region
Protected Sub Form1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
Dim d As Document
Dim df As IFactory
df = New IntFactory()
d = New Document(df)
d.DisplayValue()
End Sub
End Class

此程式輸出: value = 100
其中Form1_Click()程序的內容:
Dim d As Document
Dim df As IFactory
df = New IntFactory()
d = New Document(df)
d.DisplayValue()

就相當於:
Dim d As New Document(New IntFactory())
d.DisplayValue()

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
1区2区3区国产精品| 欧美午夜免费电影| 亚洲高清免费观看| 亚洲男人天堂一区| 国产精品的网站| 中文字幕在线不卡一区| 中文字幕在线不卡| 亚洲欧美自拍偷拍| 亚洲欧美日韩中文字幕一区二区三区 | 欧美亚洲国产一卡| 91小视频免费观看| 在线视频国内自拍亚洲视频| 色久综合一二码| 欧美性大战久久久| 欧美日韩国产精品自在自线| 欧美无砖砖区免费| 91精品国产综合久久蜜臀| 日韩一区二区在线看片| 欧美大片在线观看一区| 久久久久久久久久电影| 国产精品久久久久精k8| 亚洲精品欧美激情| 亚洲成人一区在线| 国内久久婷婷综合| 99精品黄色片免费大全| 欧美视频日韩视频| 精品久久人人做人人爽| 中文文精品字幕一区二区| 自拍偷自拍亚洲精品播放| 亚洲综合偷拍欧美一区色| 丝袜a∨在线一区二区三区不卡| 婷婷综合另类小说色区| 激情综合色综合久久| 99国产欧美另类久久久精品| 欧美日韩在线播放一区| 亚洲精品一区二区三区在线观看| 欧美国产一区在线| 午夜欧美一区二区三区在线播放| 久久福利视频一区二区| 色狠狠一区二区三区香蕉| 日韩三级免费观看| 最好看的中文字幕久久| 美腿丝袜亚洲色图| 91精品国产品国语在线不卡| 精品国产乱码久久久久久免费 | 中文字幕在线不卡| 日韩高清电影一区| 成人av在线影院| 91精品国产综合久久精品性色| 国产精品无码永久免费888| 亚洲综合男人的天堂| 国产精品一区二区你懂的| 欧美日韩国产色站一区二区三区| 国产日韩精品久久久| 视频在线观看91| 99久久免费精品| 精品成人在线观看| 亚洲国产另类av| 粉嫩aⅴ一区二区三区四区| 5月丁香婷婷综合| 一区二区三区四区乱视频| 国产伦精品一区二区三区免费迷| 欧美日韩黄色影视| 亚洲精选视频免费看| 国产福利视频一区二区三区| 欧美一区二区三区免费视频| 亚洲自拍偷拍麻豆| 色综合一区二区| 中文字幕欧美激情一区| 久久97超碰色| 日韩精品一区二区三区中文精品| 亚洲国产成人av好男人在线观看| 菠萝蜜视频在线观看一区| 国产色产综合色产在线视频| 国产伦精品一区二区三区视频青涩 | 欧美成人女星排行榜| 亚洲电影一级黄| 欧美视频日韩视频在线观看| 亚洲一区二三区| 91久久精品一区二区三区| 中文字幕一区二区三中文字幕| 国产老妇另类xxxxx| 久久久国产综合精品女国产盗摄| 精品一区二区国语对白| 精品少妇一区二区| 国产一区二区三区日韩| 久久精品无码一区二区三区| 国产福利一区二区三区视频在线| 久久免费电影网| 国产成人福利片| 国产精品久久久久一区| 91在线观看一区二区| 亚洲一区二区三区四区在线免费观看 | 日韩中文字幕区一区有砖一区| 欧美性三三影院| 视频一区视频二区中文| 日韩一区二区三区视频| 久久国产成人午夜av影院| 久久久综合视频| av一区二区三区| 一区二区三区高清| 91精品国产一区二区三区香蕉| 精品中文字幕一区二区| 国产精品久久毛片| 91久久奴性调教| 免费一级欧美片在线观看| 久久色在线观看| aaa国产一区| 午夜伊人狠狠久久| 久久久久久夜精品精品免费| 99精品视频一区| 免费成人在线影院| 国产精品理论片| 欧美男生操女生| 成人激情视频网站| 丝袜a∨在线一区二区三区不卡 | 国产精品色哟哟网站| 欧洲激情一区二区| 久久狠狠亚洲综合| 亚洲乱码中文字幕| 精品国产乱码久久久久久久久| 91碰在线视频| 久久69国产一区二区蜜臀| 亚洲天堂精品视频| 日韩久久精品一区| 91精品办公室少妇高潮对白| 国产中文一区二区三区| 亚洲一区二区三区小说| 国产精品美女一区二区| 日韩欧美亚洲国产另类| 91麻豆免费看片| 国产精品1区2区3区| 日本免费新一区视频| 亚洲精品五月天| 日本一区二区三区国色天香 | 激情五月婷婷综合网| 亚洲一区二区三区小说| 国产精品久久久久精k8| 久久综合九色综合欧美98| 欧美三级韩国三级日本一级| 99精品久久99久久久久| 国产成人午夜99999| 激情图片小说一区| 五月激情六月综合| 亚洲综合视频网| 亚洲欧美日韩中文字幕一区二区三区| 久久综合色8888| 精品少妇一区二区三区免费观看| 欧美久久久久中文字幕| 欧美亚洲日本一区| 在线观看精品一区| 色吧成人激情小说| 一本高清dvd不卡在线观看 | 夜夜爽夜夜爽精品视频| 自拍偷拍欧美激情| 国产精品乱码一区二区三区软件| 久久综合久久鬼色中文字| 精品久久久久久久久久久久久久久| 欧美日韩亚洲综合在线 | 亚洲自拍偷拍网站| 亚洲综合清纯丝袜自拍| 亚洲一级二级三级| 天天av天天翘天天综合网| 亚洲超丰满肉感bbw| 亚洲一区二区五区| 亚洲高清免费观看 | 欧美激情一区三区| 中文一区一区三区高中清不卡| 欧美极品美女视频| 亚洲欧美在线aaa| 一区二区三区中文在线| 亚洲福利一区二区三区| 日韩激情av在线| 久久99这里只有精品| 国产一区中文字幕| 成人h版在线观看| 色综合 综合色| 在线不卡欧美精品一区二区三区| 91精品国产入口| 国产欧美日韩视频一区二区| 欧美国产一区二区在线观看| 精品亚洲成a人| 国产精品1区2区3区在线观看| 9l国产精品久久久久麻豆| 在线亚洲一区观看| 欧美一区二区免费视频| 国产日韩三级在线| 亚洲欧美日韩人成在线播放| 亚洲国产精品久久一线不卡| 精品一区二区三区不卡| 99国产精品久久久| 91麻豆精品国产91久久久久久久久| 久久综合九色欧美综合狠狠| 亚洲日本青草视频在线怡红院| 亚洲国产另类av| 成人国产一区二区三区精品| 欧美日本一区二区三区四区| 欧美国产精品久久| 青娱乐精品在线视频| 成人免费观看视频|