想要做到,不管什麼product都可以套用相同的產生流程
也就是說一個factory可以用來產生不同的product
這時候就可以用Factory Pattern
定義好抽象的Factory類別與Product類別當框架Framework
在Factory定義實體method產生Product物件
在外部程式要利用Factory產生Product
都是利用上層Framework設定好抽象的factory與product
所提供的public method
但真正內部運作的是分別繼承自factory與product的realFactory
與realProduct
如果要產生不同的product,就可以分別產生不同的realFactory與
realProduct
在不變動外部Main程式狀況下 即可直接使用
參與者
1.Factory (屬framwork)
在Factory class內是用到了Templete Pattern,
提供外部呼叫使用的public method(create),是一個實體的method
而在這public method內呼叫執行的是一些抽象method
這些method就必須要被繼承的子類別實作出來
public abstract classFactory{
public Product create(){
Product p =createProduct();
registProduct(p);
return p;
}
protected abstract Product createProduct();
protected abstract void registProduct(Product p);
}
2.RealFactory (instance)
繼承自Factory後,把factory內定一的抽象method都實作出來
public class RealFactory extends Factory{
protected Product createProduct(){
return RealProduct();
};
protected abstract void registProduct(Product p){
.....
};
}
3.Product (屬framework)
只定義public 抽象method,來規範外界要操作使用product的方法
public abstract class Product{
public abstract void use();
}
4.RealProcuct(instance)
真正的產品class,繼承自Product,並把Product內定義的
抽象method 實作
public class RealProduct{
public void use(){
.....
}
}
5.Main(外部主程式)
產生一個實體的Factory,雖然是new RealFactory()
但類別宣告,還是宣告在其上層的Factory
利用產生的factory來產生product
真正產生的是realProduct物件
但類別還是宣告在其上層的Product class
Factory factory=new RealFactory();
Product product=factory.creat()
product.use();
ps:在Product的子類別,不提供public的建構子,目的是在於
強制規範product只能經由factory去產生,而不能自行使用
new product()產生出來
沒有留言:
張貼留言