這段時(shí)間在學(xué)習(xí)Android,也要學(xué)點(diǎn)jav方面的編程知識(shí)
乘著這個(gè)機(jī)會(huì),俺就總結(jié)下學(xué)過(guò)和使用過(guò)的設(shè)計(jì)模式,并使用java寫(xiě)下
先說(shuō)簡(jiǎn)單工廠
簡(jiǎn)單工廠屬于工廠模式的一種,不過(guò)似乎不在GOF模式之列.
一句話描述:簡(jiǎn)單工廠就是根據(jù)給定要求生成給定對(duì)象
簡(jiǎn)單的java版本代碼如下:
public interface Product
{
abstract public void Call();
};
public Pen implements Product
{
public void Call()
{
}
};
public Book implements Product
{
public void Call()
{
}
};
public clas Factory
{
public Product CreateProducrt(String name)
{
if(name.equals("Pen"))
return Pen.class.newInstance();
else if(name.equals("Book"))
return Book.class.newInstance();
return null;
}
};
簡(jiǎn)單工廠就是根據(jù)輸入標(biāo)簽返回給定的對(duì)象實(shí)例
很顯然,簡(jiǎn)單工廠的主要缺陷就在于:如果需要增加一個(gè)新的產(chǎn)品那就需要修改其產(chǎn)品生成函數(shù)
另外,如果把工廠和產(chǎn)品對(duì)象合二為一就變成了如下的形式:
public class Object
{
public static ObjectCreateObject(String name);
other function.
};
這類似于MFC中CObject
簡(jiǎn)單工廠的一個(gè)使用例子如下(之前我寫(xiě)的GUI):
class WidgetFactory
{
public:
Widget* CreateWidgetByName(const std::string& name);
};
在這里如果傳入Spin則返回一個(gè)new Spin,傳入一個(gè)Slider則返回一個(gè)new Slider對(duì)象
如果我增加一個(gè)新的Widget對(duì)象,則需要把CreateWidgetByName函數(shù)修改下(當(dāng)然可以使用Object::CreateObject(name)函數(shù),只是返回的對(duì)象需要做類型轉(zhuǎn)換,原則一致)
下篇說(shuō)說(shuō)抽象工廠和工廠方法吧