?? 最近開始學習設計模式,在此做個筆記。
?? 先從工廠模式學起,
?? 工廠模式是專門負責將大量有共同接口的類實例化,而且不必事先知道每次是要實例化哪一個類的模式。
工廠模式有三種形態??
????簡單工廠(Simple Factory)模式
工廠方法(Factory Method)模式,又稱多形性工廠(Polymorphic Factory)模式
抽象工廠(Abstract Factory)模式,又稱工具箱(Kit或Toolkit)模式?
? ?? 簡單工廠模式是由單個工廠類來決定到底應該實例化哪個子類,這個類扮演著“交通警察”的角色,它返回的類都具有共同的父類或者共同方法,當然它們執行內容不同。
??? 下面來看看一個例子。假設要建立一個登記表單,允許你按照不同的格式如:“名 姓” 或者“姓,名”錄入姓名,我們希望能通過姓和名之間是否有逗號來確定姓名的順序。
代碼清單1: 姓名的基類
??????public class Namer??????????? //也可能是一個接口
??????{
???????protected String first;?? //名
???????protected String last;?? //姓
??????public String getFirst()
??????{
???? ????return this.first;?? //返回名
??????}
????? public String getLast()
????? {
???????????return this.last;???? //返回姓
????? }
????};
代碼清單2;名在前的具體類
public class FirstFirst extends Namer
{
?public FirstFirst(String name)
?{
??int index=name.lastIndexOf(" ");?? //查找分隔空格
??if(index>0)??? ?//存在空格
??{
???last=name.substring(0,index);
???first=name.substring(index+1);
??}
??else???????? //不存在空格,名為空
??{
???first=name;
???last="";
??}
?}
};
代碼清單3:?? 姓在前的具體類
public class LastFirst extends Namer
{
?public? LastFirst(String name)
?{
??int index=name.indexOf(",");
??if(index>0)
??{
???first=name.substring(0,index);
???last=name.substring(index+1);
??}
??else
??{
???first=name;
???last="";
??}
?}
};
代碼清單4:?? 單一的工廠類
public class NameFactory
{
?public Namer getNamer(String entry)
?{
??int index=entry.indexOf(",");
??if(index>0)
??{
???return new LastFirst(entry);
??}
??else
???return new FirstFirst(entry);
?}
};
這樣就構成了一個簡單工廠模式,實際上更一般的簡單工廠模式的架構如下.
public class Creator
{
??? //創建工廠方法,一般根據參數來決定產生哪個產品
public Product factory()
{
return new ConcreteProduct();
}
}
//抽象產品
public interface Product
{
}
//具體的產品,一般有多個
public class ConcreteProduct implements Product
{
public ConcreteProduct(){}
}
學了簡單工廠模式,覺得本模式很容易理解,以前也用過,只是當時不知道而已。
參考文獻:1.<<java設計模式>>
???????????????? 2.http://www.yesky.com/20011114/205122.shtml