日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

软件工程 - 设计模式学习之工厂方法模式Factory Method

發布時間:2023/12/18 asp.net 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 软件工程 - 设计模式学习之工厂方法模式Factory Method 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在現實生活中我們可以看見,樂事在賣薯片,可比克也在賣.
我敢肯定的說它們各自都有自己的工廠來生產薯片,而且生產出來的薯片味道還是不一樣的.
這就是我們這里所謂的工廠方法模式. 我們來看看這個模式的UML圖:

?

這個模式中我們可以看到:
產品和工廠2個基類,然后它們下面又有些子孫類.
--------------------------------------------------------------------------------
現在進入我們的代碼環節了,首先上場的是PHP.?

代碼 ?1?//抽象產品???
?2?abstract?class?Product{???
?3?????abstract?function?Test();???
?4?}???
?5???
?6?class?leshi?extends?Product?{???
?7?????public?function?Test()?{???
?8?????????echo("Leshi!\n");???
?9?????}???
10?}???
11?class?kebike?extends?Product?{???
12?????public?function?Test()?{???
13?????????echo("Kebike!\n");???
14?????}???
15?}???
16?//抽象工廠???
17?abstract?class?Factory{???
18?????abstract?function?GetProduct();???
19?}???
20???
21?class?leshiFactory?extends?Factory{?????
22?????public?function?GetProduct()?{???
23?????????return?new?leshi();???
24?????}???
25?}???
26?class?kebikeFactory?extends??Factory{???
27?????public?function?GetProduct()?{???
28?????????return?new?kebike();???
29?????}???
30?}???
31?//首先我們先建立兩個公司的工廠.???
32?$leshiF?=?new?leshiFactory();???
33?$kebikeF?=?new?kebikeFactory();???
34?//每個工廠給我出10包薯片???
35?for($i=0;$i<10;$i++){???
36?????$leshiF->GetProduct()->Test();???
37?????$kebikeF->GetProduct()->Test();???
38?}??
39?
40?//抽象產品
41?abstract?class?Product{
42?????abstract?function?Test();
43?}
44?
45?class?leshi?extends?Product?{
46?????public?function?Test()?{
47?????????echo("Leshi!\n");
48?????}
49?}
50?class?kebike?extends?Product?{
51?????public?function?Test()?{
52?????????echo("Kebike!\n");
53?????}
54?}
55?//抽象工廠
56?abstract?class?Factory{
57?????abstract?function?GetProduct();
58?}
59?
60?class?leshiFactory?extends?Factory{??
61?????public?function?GetProduct()?{
62?????????return?new?leshi();
63?????}
64?}
65?class?kebikeFactory?extends??Factory{
66?????public?function?GetProduct()?{
67?????????return?new?kebike();
68?????}
69?}
70?//首先我們先建立兩個公司的工廠.
71?$leshiF?=?new?leshiFactory();
72?$kebikeF?=?new?kebikeFactory();
73?//每個工廠給我出10包薯片
74?for($i=0;$i<10;$i++){
75?????$leshiF->GetProduct()->Test();
76?????$kebikeF->GetProduct()->Test();
77?}
78?
79?

?

和簡單工廠模式有點兒像,但是那個只有一個工廠實例,
而我們這里是有多少種產品就有多少個工廠實例
--------------------------------------------------------------------------------
?C#粉墨登場:

代碼 namespace?FactoryMethod_DesignPattern???
{???
????
using?System;???
??
????
//?These?two?classes?could?be?part?of?a?framework,???
????
//?which?we?will?call?DP???
????
//?===============================================???
???????
????
class?DPDocument????
????{???
???????
??
????}???
??
????
abstract?class?DPApplication????
????{???
????????
protected?DPDocument?doc;???
???????????
????????
abstract?public?void?CreateDocument();???
??
????????
public?void?ConstructObjects()???
????????{???
???????????????
????????????
//?Create?objects?as?needed???
????????????
//?.?.?.???
??
????????????
//?including?document???
????????????CreateDocument();???
????????}??????????
????????
abstract?public?void?Dump();???
????}???
??
????
//?These?two?classes?could?be?part?of?an?application????
????
//?=================================================???
??
????
class?MyApplication?:?DPApplication????
????{???
????????
override?public?void?CreateDocument()???
????????{???
????????????doc?
=?new?MyDocument();????????????
????????}??????????????
??
????????
override?public?void?Dump()???
????????{???
????????????Console.WriteLine(
"MyApplication?exists");???
????????}???
????}??????
??
????
class?MyDocument?:?DPDocument????
????{???
??
????}???
??
????
///?<SUMMARY></SUMMARY>???
????
///????Summary?description?for?Client.???
????
///????
????public?class?Client???
????{???
????????
public?static?int?Main(string[]?args)???
????????{???
????????????MyApplication?myApplication?
=?new?MyApplication();???
??
????????????myApplication.ConstructObjects();???
??
????????????myApplication.Dump();???
???????????????
????????????
return?0;???
????????}???
????}???
}??

namespace?FactoryMethod_DesignPattern
{
????
using?System;

?
//?These?two?classes?could?be?part?of?a?framework,
?
//?which?we?will?call?DP
?
//?===============================================
?
?
class?DPDocument?
?{
?

?}

?
abstract?class?DPApplication?
?{
??
protected?DPDocument?doc;
??
??
abstract?public?void?CreateDocument();

??
public?void?ConstructObjects()
??{
???
???
//?Create?objects?as?needed
???
//?.?.?.

???
//?including?document
???CreateDocument();
??}??
??
abstract?public?void?Dump();
?}

?
//?These?two?classes?could?be?part?of?an?application?
?
//?=================================================

?
class?MyApplication?:?DPApplication?
?{
??
override?public?void?CreateDocument()
??{
???doc?
=?new?MyDocument();???
??}???

??
override?public?void?Dump()
??{
???Console.WriteLine(
"MyApplication?exists");
??}
?}?

?
class?MyDocument?:?DPDocument?
?{

?}

????
///?
????
///????Summary?description?for?Client.
????
///?
????public?class?Client
????{
????????
public?static?int?Main(string[]?args)
????????{
????????????MyApplication?myApplication?
=?new?MyApplication();

???myApplication.ConstructObjects();

???myApplication.Dump();
???
????????????
return?0;
????????}
????}
}

?

--------------------------------------------------------------------------------
Delphi王者駕臨!

?

Delphi IProduct?=?interface?
????
procedure?Test;?
??
end;?

??IFactory?
=?interface?
????
function?GetProduct:IProduct;?
??
end;?

??TLeShi?
=?class(TInterfacedObject,IProduct)?
??
public?
????
procedure?Test;?
??
end;?

??TKeBiKe?
=?class(TInterfacedObject,IProduct)?
??
public?
????
procedure?Test;?
??
end;?

??TLeShiFactory?
=?class(TInterfacedObject,IFactory)?
??
public?
????
function?GetProduct:IProduct;?
??
end;?

??TKeBiKeFactory?
=?class(TInterfacedObject,IFactory)?
??
public?
????
function?GetProduct:IProduct;?
??
end;?

var?
??Form1:?TForm1;?

implementation?

{$R?*.dfm}?

{?TKeBiKeFactory?}?

function?TKeBiKeFactory.GetProduct:?IProduct;?
begin?
??Result:
=TKeBiKe.Create;?
end;?

{?TLeShi?}?

procedure?TLeShi.Test;?
begin?
??ShowMessage(
'LeShi!');?
end;?

{?TKeBiKe?}?

procedure?TKeBiKe.Test;?
begin?
??ShowMessage(
'KeBiKe');?
end;?

{?TLeShiFactory?}?

function?TLeShiFactory.GetProduct:?IProduct;?
begin?
??Result:
=TLeShi.Create;?
end;?

?

--------------------------------------------------------------------------------
給樂事和可比克打了廣告不知道能不能得到點兒廣告費喲..哈哈.
我們最后看看這個模式的適用性:

當一個類不知道它所必須創建的對象的類的時候。
當一個類希望由它的子類來指定它所創建的對象的時候。
當類將創建對象的職責委托給多個幫助子類中的某一個,并且你希望將哪一個幫助子類是代理者這一信息局部化的時候。

轉載于:https://www.cnblogs.com/huangjacky/archive/2009/12/07/1618918.html

總結

以上是生活随笔為你收集整理的软件工程 - 设计模式学习之工厂方法模式Factory Method的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。