(抽象)工廠設計模式
一、 工廠設計模式
1.定義
一個用於建立物件的介面,讓子類決定例項化哪個類
2.使用場景
在任何需要生成複雜物件的地方,都可以使用工廠方法模式,複雜物件適合使用工廠模式,直接用new出來的物件無需使用工廠模式。
3.核心類以及UML建模圖
抽象工廠類,具體工廠類,抽象產品類,具體產品類,客戶端使用

簡單工廠設計模式.jpg
3.1 抽象工廠類
public abstract class AbastractIoFactory { public abstract<T extends IoHandler> T getIoHandler(Class<T> clazz); }
3.2 具體工廠
public class IoFactory extends AbastractIoFactory { @Override public<T extends IoHandler> T getIoHandler(Class<T> clazz) { IoHandler handler = null; try { handler = (IoHandler) Class.forName(clazz.getName()).newInstance(); } catch (Exception e) { e.printStackTrace(); } return (T) handler; } }
3.3 抽象產品
public abstract class IoHandler { /** * 新增資料方法 * @param message */ abstract void add(String message); /** * 刪除方法 * @param message */ abstract void delete(String message); /** * 更新 * @param message */ abstract void update(String message); /** * 查詢 * @param message */ abstract void query(String message); }
3.4具體產品A
public class GreenDaoHandler extends IoHandler { @Override void add(String message) { System.out.println("GreenDaoHandler handle add()" + message); } @Override void delete(String message) { System.out.println("GreenDaoHandler handle delete()" + message); } @Override void update(String message) { System.out.println("GreenDaoHandler handle update()" + message); } @Override void query(String message) { System.out.println("GreenDaoHandler handle query()" + message); } }
3.5 具體產品B
public class RealRoomHandler extends IoHandler { @Override void add(String message) { System.out.println("RealRoomHandler handle add()" + message); } @Override void delete(String message) { System.out.println("RealRoomHandler handle delete()" + message); } @Override void update(String message) { System.out.println("RealRoomHandler handle update()" + message); } @Override void query(String message) { System.out.println("RealRoomHandler handle query()" + message); } }
3.6 client
public class Client { public static void main(String[] args){ AbastractIoFactory ioFactory=new IoFactory(); IoHandler greenDaoHandler = ioFactory.getIoHandler(GreenDaoHandler.class); greenDaoHandler.add("One X"); greenDaoHandler.delete("One X"); greenDaoHandler.update("One X"); greenDaoHandler.query("One X"); IoHandler realRoomHandler = ioFactory.getIoHandler(RealRoomHandler.class); realRoomHandler.add("One X"); realRoomHandler.delete("One X"); realRoomHandler.update("One X"); realRoomHandler.query("One X"); } }
二、 抽象工廠設計模式
1、核心實現類
-
抽象工廠類 :抽象工廠角色,宣告一組建立產品的方法,每一個方法對應生成一種產品
-
具體工廠角色: 實現抽象工廠中定義的建立產品的方法,生成一組具體的產品,這些產品構成一個產品品種,每一個產品都位於每個產品的等級結構中
-
抽象產品角色,為每一種產品申明介面,即該類產品必須所應有的屬性或者方法
-
具體產品角色,定義具體工廠生產的具體產品物件,實現抽象產品介面中申明的業務方法。
2、具體使用
2.1抽象工廠角色
public abstract class AbstractFactory { public abstract AbastractProductA createProductA(); public abstract AbastractProductB createProductB(); }
2.2具體工廠角色A
public class RealFactory1 extends AbstractFactory { @Override public AbastractProductA createProductA() { return new RealProductA1(); } @Override public AbastractProductB createProductB() { return new RealProductB1(); } }
2.3抽象產品
public interface AbastractProductA { void method(); }
2.4具體產品
public class RealProductA1 implements AbastractProductA{ @Override public void method() { System.out.println("我是A1產品"); } }
2.5具體使用
public class Client { public static void main(String[] args){ AbstractFactory factory=new RealFactory1(); AbastractProductA productA = factory.createProductA(); productA.method(); AbastractProductB productB = factory.createProductB(); productB.method(); AbstractFactory factoryB=new RealFactory2(); AbastractProductA productA1 = factoryB.createProductA(); productA1.method(); AbastractProductB productB1 = factoryB.createProductB(); productB1.method(); } }