一.概念
抽象工厂模式提供一个接口,用于创建相关或依赖对象的家族,而不需要明确知道具体类。
二.实例分析
CPU
package com.zzy.abstractFactory; /** * CPU接口 * @author eason * */ public interface CPU { public void work(); }
WDCPU/SamSungCPU/SeagateCPU类似,只贴出一个
package com.zzy.abstractFactory; /** * 西数CPU * @author eason * */ public class WDCPU implements CPU{ @Override public void work() { System.out.println("西数CPU is working..."); } }
Disk
package com.zzy.abstractFactory; /** * CPU接口 * @author eason * */ public interface Disk { public void write(); }
WDDisk/SamSungDisk/SeagateDisk类似,只贴出一个
package com.zzy.abstractFactory; public class WDDisk implements Disk { @Override public void write() { System.out.println("西数硬盘 is working..."); } }
AbstractFactory
package com.zzy.abstractFactory; /** * 抽象工厂接口 * @author eason * */ public interface AbstractFactory { public CPU createCPU(); public Disk createDisk(); }
WDFactory/SamSungFactory/SamSungFactory类似,只贴出一个
package com.zzy.abstractFactory; /** * 三星工厂 * @author eason * */ public class WDFactory implements AbstractFactory{ @Override public CPU createCPU() { return new WDCPU(); } @Override public Disk createDisk() { return new SamSungDisk(); } }
TestAbstractFactory
package com.zzy.abstractFactory; /** * 测试类 * @author eason * */ public class TestAbstractFactory { public static void main(String[] args) { //三星工厂 AbstractFactory factory = new WDFactory(); //三星工厂生产的CPU CPU cpu = factory.createCPU(); //三星工厂生产的硬盘 Disk disk = factory.createDisk(); cpu.work(); disk.write(); } }
三.抽象工厂模式的产品等级与产品族
四.简单工厂,工厂方法,抽象工厂的联系去区别
简单工厂:只有一个具体工厂类来创建一种基类的不同派生类。
工厂方法:有多个派生于一个基类的具体工厂类,每个工厂类只生产一种基类的一个派生类。
抽象工厂:只有一个工厂基类,其具体派生类生产相关基类的各一个派生类。
简单工厂:生产同一等级结构中的任意产品。
工厂方法:生产同一等级结构中的固定产品。
抽象工厂:生产不同产品族的全部产品。