抽象工厂模式
java设计模式大体分为23种设计模式,直接通过例子学习设计模式,更易于理解和思考其中的原理和作用,以下给出抽象工厂模式 的demo:
MainRun.java类,是程序运行入口,含有main方法。大伙认真的看main方法上面的注释喔,是博主对此模式的总结和分析。(附 advantage是表示使用此模式的优势,disadvantage是此模式的不足和缺点,use scene是表示此模式的使用场景。)
package cn.cat.design.mode.factory.abstracted; public class MainRun { /**抽象工厂模式:是简单工厂模式的抽象化。对工厂与生成的产品都进行抽象(抽象类或接口)。 * advantage: 客户需要不同的产品,只需要使用不同工厂的实现类即可。 * disadvantage:会引起大量的接口或抽象类,工厂模式会变得更加复杂化。 * use scene:当获取需要的是一个产品簇,而非单一一个产品时。 * @param args */ public static void main(String[] args) { //根据客户的需要,只需要更换不同的工厂实现类即可。 // ComputerComponentFactory factory = new AmdComputerComponentFactory(); ComputerComponentFactory factory = new InterComputerComponentFactory(); CPU cpu = factory.createCPU(); MainBoard mainBoard = factory.createMainBoard(); System.out.println("cpu.stitch:"+cpu.getStitch() + " mainBoard.cpuSlotStitch:" + mainBoard.getCPUSlotStitch()); } }
CPU.java
package cn.cat.design.mode.factory.abstracted; /** *电脑CPU * @author Cat(gwj) * date 2015-8-8 * time 下午5:20:32 */ public interface CPU { /**获取cpu针脚 * @return */ public int getStitch (); }
MainBoard.java
package cn.cat.design.mode.factory.abstracted; /** * 电脑主板 * @author Cat(gwj) * date 2015-8-8 * time 下午5:20:41 */ public interface MainBoard { /**获取主板cpu插槽的针脚 * @return */ public int getCPUSlotStitch (); }
ComputerComponentFactory.java
package cn.cat.design.mode.factory.abstracted; public interface ComputerComponentFactory { public CPU createCPU(); public MainBoard createMainBoard(); }
AmdComputerComponentFactory.java
package cn.cat.design.mode.factory.abstracted; public class AmdComputerComponentFactory implements ComputerComponentFactory { @Override public CPU createCPU() { return new AmdCPU(); } @Override public MainBoard createMainBoard() { return new AmdMainBoard(); } }
AmdCPU.java
package cn.cat.design.mode.factory.abstracted; public class AmdCPU implements CPU { @Override public int getStitch() { return 36; } }
package cn.cat.design.mode.factory.abstracted; public class AmdMainBoard implements MainBoard{ @Override public int getCPUSlotStitch() { return 36; } }
InterComputerComponentFactory.java
package cn.cat.design.mode.factory.abstracted; public class InterComputerComponentFactory implements ComputerComponentFactory { @Override public CPU createCPU() { return new InterCPU(); } @Override public MainBoard createMainBoard() { return new InterMainBoard(); } }
InterCPU.java
package cn.cat.design.mode.factory.abstracted; public class InterCPU implements CPU { @Override public int getStitch() { return 42; } }
InterMainBoard.java
package cn.cat.design.mode.factory.abstracted; public class InterMainBoard implements MainBoard{ @Override public int getCPUSlotStitch() { return 42; } }