• 抽象工厂模式


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



    AmdMainBoard.java
    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;
    	}
    
    }
    



  • 相关阅读:
    js获取客户端IP及地理位置
    跟SAP系统集成的Android应用
    关于刘冬大侠Spring.NET系列学习笔记3的一点勘正
    设置浏览器全屏模式
    一个模拟"显示桌面.scf"程序的JS小函数
    网站整体变灰(黑白、置灰)原理
    苹果手机上input的button按钮颜色显示问题
    用Python做数据清洗:采集几百个xls或csv中的数据并汇总
    用ISO-8859-1解决Python 'utf-8' codec can't decode bytes in position 924-925问题
    Python批量转换子文件夹下的文件编码
  • 原文地址:https://www.cnblogs.com/catgwj/p/7541448.html
Copyright © 2020-2023  润新知