一、完成者資訊:
姓名:韋慶
學號:07770104
二、模式資訊
模式名稱:工廠模式
模式概述:
當系統準備為使用者提供某個類的子類的例項,又不想讓使用者**和該子類形成耦合時,就可以使用工廠方法模式來設計系統。工廠方法模式的關鍵是在乙個介面或抽象類中定義乙個抽象方法,該方法返回某個類的子類例項,該抽象類或介面讓其子類或實現該介面的類通過重寫這個抽象方法返回某個子類的例項。
工廠方法模式的結構中包括四種角色。
● 抽象產品(product):抽象類或介面,負責定義具體產品必須實現的方法。
● 具體產品(concreteproduct):具體產品是乙個類,如果product是乙個抽象類,那麼具體產品是product的子類;如果product是乙個介面,那麼具體產品是實現product介面的類。
● 構造者(creator):乙個介面或抽象類。構造者負責定義乙個稱作工廠方法的抽象方法,該方法返回具體產品類的例項。
● 具體構造者(concretecreator):如果構造者是抽象類,具體構造者是構造者的子類;如果構造者是介面,具體構造者是實現構造者的類。具體構造者重寫工廠方法使該方法返回具體產品的例項。
定義:
定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類。工廠方法模式使乙個類的例項化延遲到其子類。
生活場景:
我們經常使用的手機型別多種多樣,每種型別的手機製造商都可能不一樣,但是這些製造商有乙個共同點那就是目的就是生產手機。
終極目標:不同廠家生產不同型別的手機。
1.不假思索的思路:
針對每一種型別的手機都宣告乙個類,然後抽象出乙個手機類,在抽象類中定義乙個抽象方法用來生產手機。如下:
實現**:
public abstract class phone
public abstract void produce();
public class nokia : phone
public override void produce()
console.writeline("生產nokia手機");
public class motorola : phone
public override void produce()
console.writeline("生產motorola手機");
class program
static void main(string args)
phone p;
p = new nokia();
p.produce();
p = new motorola();
p.produce();
console.readline();
缺點:手機本身是乙個整體,它並沒有生產的方法,也即該子類已經和使用者**形成了耦合,這實際上是不成立的。
2.歸納階段
用工廠方法模式定義乙個工廠方法,並為每種手機型別定義乙個工廠,這樣就達到子類和使用者脫耦的目的。實現如下:
實現**:
抽象產品
public abstract class mobile
public string product;
public abstract void produce(string msg);
.具體產品
public class motorola : mobile
public motorola()
product = "motorola";
public override void produce(string msg)
console.writeline("生產了一台" + msg + "手機");
public class nokia : mobile
public nokia()
product = "nokia";
public override void produce(string msg)
console.writeline("生產了一台" + msg + "手機");
console.writeline();
構造者public abstract class mobilefactory
public mobilefactory()
console.writeline( getmobile().product + "手機製造廠");
public abstract mobile getmobile();//工廠方法
具體構造者
public abstract class mobilefactory
public mobilefactory()
console.writeline( getmobile().product + "手機製造廠");
public abstract mobile getmobile();//工廠方法
public class nokiafactory : mobilefactory
public nokiafactory()
"生產了一台" + getmobile().product + "的手機");
public override mobile getmobile()
return new nokia();
class program
static void main(string args)
mobile mobile;
mobilefactory mfactory = new nokiafactory();
mobile = mfactory.getmobile();
mobile.produce("nokia");
mfactory = new motorolafactory();
mobile = mfactory.getmobile();
mobile.produce("motorola");
console.readline();
設計體會:通過工廠方法讓使用者**和手機子類的**解耦,同時使用者不必知道他所使用的物件是怎樣被建立的,只需要知道該物件有哪些方法即可。
3.驗證階段:
當前目標:新增生產三星手機的需求。
結果為:新增乙個三星的具體產品及生產三星手機的工廠
public class sangxing : mobile
public sangxing()
product = "sanxing";
public override void produce(string msg)
console.writeline("生產了一台" + msg + "手機");
}
public class sanxingfactory : mobilefactory
public sanxingfactory()
public override mobile getmobile()
return new sangxing();
4、抽象階段:
思路描述:將商品抽象出乙個抽象產品,接著定義每個具體產品;為每個產品宣告乙個工廠類,抽象出構造者。
類結構圖:
簡單工廠模式04
一 完成者資訊 姓名 韋慶 學號 07770104 二 模式資訊 模式名稱 簡單工廠模式 模式概述 簡單工廠模式的實質是由乙個工廠類根據傳入的參量,動態決定應該建立出哪乙個產品類的例項。簡單工廠模式涉及到工廠角色 抽象產品角色和具體產品角色三個參與者。工廠 creator 角色 是簡單工廠模式的核心...
設計模式04 抽象工廠模式
抽象工廠模式是物件的建立模式,它是工廠方法模式的進一步推廣。抽象工廠模式與工廠方法模式的最大差別就在於工廠方法模式針對的是乙個產品等級結構 而抽象工廠模式則須要面對多個產品等級結構。如果乙個子系統須要一些產品物件,而這些產品又屬於乙個以上的產品等級結構。那麼為了將消費這些產品物件的責任和建立這些產品...
大話設計模式04 工廠方法模式 2020 9 22
之前用簡單工廠模式實現的計算器類的類圖如下 當增加一類新的運算時,除了增加乙個新的子類,還需要修改簡單工廠類的實現,違反了開放 封閉原則。因此出現了工廠方法模式。工廠方法模式只是定義了乙個建立物件的介面,由子類去實現該介面,決定建立那個物件,相當於將物件的初始化延遲到了子類。通過工廠方法模式實現計算...