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;
}
}
------------------------------------------------------------demo end--------------------------------------------------------------------------