java常用設計模式3——工廠方法模式
阿新 • • 發佈:2018-12-04
1、工廠方法模式定義:定義一個用於建立物件的介面,讓子類決定例項化哪個類
2、工廠方法模式的使用場景:在任何需要生成複雜物件的地方,都可以使用工廠方法模式。複雜物件適合使用工廠模式,用new就可以完成建立的物件無需使用工廠模式
多工廠方法模式
程式碼示例:
1、定義一個抽象的產品介面(非必須)
/**
* 抽象的產品介面
*/
public abstract class Product {
/**
* 產品類的抽象方法,由具體的產品類去實現
*/
public abstract void productName();
}
2、具體的產品實現類
public class ProductA extends Product {
@Override
public void productName() {
Log.i("LHD", "這是A產品");
}
}
public class ProductB extends Product {
@Override
public void productName() {
Log.i("LHD", "這是B產品");
}
}
3、抽象工廠類
/**
* 抽象的工廠介面
*/
public abstract class Factory {
/**
* 抽象工廠方法,具體生產什麼由子類去實現
*/
public abstract Product createProduct();
}
4、具體工廠類
/**
* A產品的工廠
*/
public class FactoryA extends Factory {
@Override
public Product createProduct() {
return new ProductA();
}
}
/**
* B產品的工廠
*/
public class FactoryB extends Factory {
@Override
public Product createProduct() {
return new ProductB();
}
}
使用:
Factory factory = new FactoryA();
Product p = factory.createProduct();
p.productName();
這種方式很常見,每個產品都有自己的工廠方法,他們實現了同樣的工廠介面,需要哪個產品就使用哪個工廠,像這種擁有多個工廠的方式稱為多工廠方法模式。
簡單工廠(靜態工廠)模式
當然我們可以有更簡潔的方式,我們可以簡化成一個工廠,並去掉介面,然後給工廠類傳入一個引數,並根據引數來決定生產哪個,程式碼修改如下:
去掉介面,傳入一個類引數,來決定生產哪個產品
/**
* 使用反射來根據引數建立物件
*/
public class CreateProductFactory {
public <T extends Product> T createProduct(Class<T> clz) {
Product p = null;
try {
p = (Product) Class.forName(clz.getName()).newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return (T) p;
}
}
使用:
CreateProductFactory factory = new CreateProductFactory();//由於去掉了Factory,所以需要例項化具體的工廠物件
Product p = factory.createProduct(ProductA.class);//傳入ProductA.class則生產A產品
//Product p = factory.createProduct(ProductB.class);//傳入ProductA.class則生產B產品
p.productName();
像這樣的只有一個工廠的方式稱為簡單工廠模式或靜態工廠模式,它是工廠方法模式的一個弱化版本。
工廠方法模式是完全符合設計原則的,其降低了物件之間的耦合度,而且,工廠方法模式依賴於抽象的架構,其將例項化的任務交由子類去完成,有非常好的擴充套件性。
另外還有一個抽象工廠模式,具體沒怎麼用過,就不做介紹啦。
以上就是工廠方法模式的簡單介紹啦(#^ . ^#)