設計模式系列之---工廠模式
阿新 • • 發佈:2018-12-18
工廠模式的特點是將子類的初始化交給子類工廠去做,缺點是容易造成子類工廠的泛濫,需要什麼樣的子類就要建立對應的子類工廠。
具體的程式碼示例如下:
package pattern.factoryPattern.framework; /** * Created by think on 2018/10/28. * 工廠模式的特點是將例項的生成交給子類 */ public abstract class Factory { protected abstract Product createProduct(String owner); //建立產品,是一個抽象方法,建立具體的產品由子類決定 protected abstract void registerProduct(Product product); //註冊產品 public final Product create(String owner){ //這個也叫模板方法,定義方法的執行順序 Product p = createProduct(owner); //因為父類中定義的抽象方法,具體的實現交給各個具體的子類工廠 registerProduct(p); return p; } }
--------------------------------------------------------
package pattern.factoryPattern.framework;
/**
* Created by think on 2018/10/28
* 抽象的產品,它是的子類就是要初始化的物件.
*/
public abstract class Product {
public abstract void use(); //定義了任意可以use的東西
}
------------------------------------------------------------------------------
package pattern.factoryPattern; import pattern.factoryPattern.framework.Product; /** * Created by think on 2018/10/28. */ public class IDCard extends Product { private String owner; public IDCard(String owner){ System.out.println("製作"+owner+"的Id卡"); this.owner=owner; } @Override public void use() { System.out.println("使用"+owner+"的Id卡"); } public String getOwner(){ return owner; } }
--------------------------------------------------------------------
package pattern.factoryPattern;
import pattern.factoryPattern.framework.Factory;
import pattern.factoryPattern.framework.Product;
/**
* Created by think on 2018/10/29.
* 具體的子類,
* 工廠模式有一個缺點,容易造成子類工廠的泛濫,需要什麼樣的子類就需要新建一個具體的子類工廠類
*/
public class IDCardFactory extends Factory {
// private List owners = new ArrayList();
@Override
protected Product createProduct(String owner) { //在具體的子類中決定例項化具體的產品
return new IDCard(owner);
}
@Override
protected void registerProduct(Product product) {
// owners.add(((IDCard)product).getOwner());
}
// public List getOwners(){
// return owners;
// }
}
---------------------------------------------------------------
package pattern.factoryPattern;
import pattern.factoryPattern.framework.Factory;
import pattern.factoryPattern.framework.Product;
/**
* Created by think on 2018/10/29.
*/
public class TestMain {
public static void main(String[] args){
Factory f = new IDCardFactory();
Product p = f.create("小明"); //這裡走的是父類的Factory中的create方法,但是方法中的createProduct(),
//registerProduct()走的是子類中的方法
Product p1 = f.create("小剛");
p.use();
p1.use();
}
}
程式碼示例來源於《圖解設計模式》