定義一個用於建立對象的接口,讓子類決定實例化哪一個類git
public abstract class Product {
/**
* 產品類的抽象方法,由具體的產品類去實現
*/
public abstract void method();
}
複製代碼
//產品A
public class ProductA extends Product {
@Override
public void method() {
System.out.println("產品A");
}
}
//產品B
public class ProductB extends Product {
@Override
public void method() {
System.out.println("產品B");
}
}
複製代碼
public abstract class Factory {
/**
* @param clz 產品對象類型
* @return 具體的產品類型
*/
public abstract <T extends Product> T createProduct(Class<T> clz);
}
複製代碼
public class ConcreteFactory extends Factory {
@Override
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;
}
}
複製代碼
Factory factory = new ConcreteFactory();
Product productA = factory.createProduct(ProductA.class);
Product productB = factory.createProduct(ProductB.class);
productA.method();
productB.method();
複製代碼
public abstract class AbstractIoHandler {
/**
* 添加我的信息
*
* @param id 身份證號碼
* @param name 姓名
*/
public abstract void add(String id, String name);
/**
* 根據ID刪除一條信息
*
* @param id 身份證
*/
public abstract void remove(String id);
/**
* 更新我的信息
*
* @param id 身份證
* @param name 姓名
*/
public abstract void update(String id, String name);
/**
* 查詢ID對應的信息
*
* @param id 身份證
* @return 人名
*/
public abstract String query(String id);
}
複製代碼
public class FileHandler extends AbstractIoHandler {
@Override
public void add(String id, String name){
//業務處理
}
@Override
public void remove(String id) {
//業務處理
}
@Override
public void update(String id, String name) {
//業務處理
}
@Override
public String query(String id) {
return "";
}
}
複製代碼
public class IoFactory {
/**
* 獲取IoHandler
*
* @param clz AbstractIoHandler類型的類
* @return AbstractIoHandler對象
*/
public static <T extends AbstractIoHandler> T getIoHandler(Class<T> clz) {
AbstractIoHandler handler = null;
try {
handler = (AbstractIoHandler) Class.forName(clz.getName()).newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return (T) handler;
}
}
複製代碼
AbstractIoHandler ioHandler = IoFactory.getIoHandler(FileHandler.class);
System.out.println(ioHandler.query("123456"));
複製代碼
源碼地址:https://github.com/snowdream1314/DesignPatternsExamplesgithub
歡迎關注個人微信公衆號,期待與你一塊兒學習,一塊兒交流,一塊兒成長! 數據庫