• 抽象工厂模式


    (原文转自:http://www.cnblogs.com/java-my-life/archive/2012/03/28/2418836.html
    说明:
        简单工厂尚有个问题没有解决:当客户给出的cpu、mainboard类型分别是1,2的话,实际上是不兼容的。而简单工厂并没有维护对象之间的关系
       每一个模式都是针对一定问题的解决方案。抽象工厂模式与工厂方法模式的最大区别就在于,工厂方法模式针对的是一个产品等级结构;而抽象工厂模式则需要面对多个产品等级结构。
     

    源代码

      前面示例实现的CPU接口和CPU实现对象,主板接口和主板实现对象,都不需要变化。

      前面示例中创建CPU的简单工厂和创建主板的简单工厂,都不再需要。

      新加入的抽象工厂类和实现类:

    /**
     * Project Name:DesignPatterns
     * File Name:IntelFactory.java
     * Package Name:com.louis.abstractfactory
     * Date:2017年9月25日下午10:50:51
     * Copyright (c) 2017, 2692613726@qq.com All Rights Reserved.
     *
    */
    
    package com.louis.abstractfactory;
    /**
     * ClassName:IntelFactory 
     * Function: TODO ADD FUNCTION. 
     * Reason:     TODO ADD REASON. 
     * Date:     2017年9月25日 下午10:50:51 
     * @author   michael
     * @version  
     * @since    JDK 1.7
     * @see      
     */
    public interface AbstractFactory {
        //创建cpu对象
        public Cpu createCpu();
        
        //创建主板对象
        public Mainboard createMainboard();
    }
    /**
     * Project Name:DesignPatterns
     * File Name:IntelFactory.java
     * Package Name:com.louis.abstractfactory
     * Date:2017年9月25日下午10:55:15
     * Copyright (c) 2017, 2692613726@qq.com All Rights Reserved.
     *
    */
    
    package com.louis.abstractfactory;
    /**
     * ClassName:IntelFactory 
     * Function: TODO ADD FUNCTION. 
     * Reason:     TODO ADD REASON. 
     * Date:     2017年9月25日 下午10:55:15 
     * @author   michael
     * @version  
     * @since    JDK 1.7
     * @see      
     */
    public class IntelFactory implements AbstractFactory {
    
        /**
         * TODO 简单描述该方法的实现功能(可选).
         * @see com.louis.abstractfactory.AbstractFactory#createCpu()
         */
        @Override
        public Cpu createCpu() {
            // TODO Auto-generated method stub
            return new CpuIntel(755);
        }
    
        /**
         * TODO 简单描述该方法的实现功能(可选).
         * @see com.louis.abstractfactory.AbstractFactory#createMainboard()
         */
        @Override
        public Mainboard createMainboard() {
            // TODO Auto-generated method stub
            return new MainboardIntel(755);
        }
    
    }
    /**
     * Project Name:DesignPatterns
     * File Name:AmdFactory.java
     * Package Name:com.louis.abstractfactory
     * Date:2017年9月25日下午10:56:35
     * Copyright (c) 2017, 2692613726@qq.com All Rights Reserved.
     *
    */
    
    package com.louis.abstractfactory;
    /**
     * ClassName:AmdFactory 
     * Function: TODO ADD FUNCTION. 
     * Reason:     TODO ADD REASON. 
     * Date:     2017年9月25日 下午10:56:35 
     * @author   michael
     * @version  
     * @since    JDK 1.7
     * @see      
     */
    public class AmdFactory implements AbstractFactory {
    
        @Override
        public Cpu createCpu() {
            // TODO Auto-generated method stub
            return new CpuIntel(938);
        }
    
        @Override
        public Mainboard createMainboard() {
            // TODO Auto-generated method stub
            return new MainboardIntel(938);
        }
    
    }
    /**
     * Project Name:DesignPatterns
     * File Name:ComputerEngineer.java
     * Package Name:com.louis.simplefactory
     * Date:2017年9月25日下午9:33:31
     * Copyright (c) 2017, 2692613726@qq.com All Rights Reserved.
     *
    */
    
    package com.louis.abstractfactory;
    /**
     * ClassName:ComputerEngineer 
     * Function: 组装电脑
     * Reason:     TODO ADD REASON. 
     * Date:     2017年9月25日 下午9:33:31 
     * @author   michael
     * @version  
     * @since    JDK 1.7
     * @see      
     */
    public class ComputerEngineer {
        //定义cpu
        private Cpu cpu;
        //定义主板
        private Mainboard mainboard;
        /*
         * 组装电脑
         * */
        public void makeComputer(AbstractFactory af){
            //1准备好装机所需要的配置
            this.prepareHardwares(af);
            //2组装机器
            
            //3测试机器
            
            //4支付客户
        }
        
        public void prepareHardwares(AbstractFactory af){
            //cpu和主板的具体实现
            //装机师傅直接找相应的工程获取
            this.cpu = af.createCpu();
            this.mainboard = af.createMainboard();
            
            //测试配件是否好用
            this.cpu.calculate();
            this.mainboard.installCPU();
        }
        
    }
    /**
     * Project Name:DesignPatterns
     * File Name:Client.java
     * Package Name:com.louis.simplefactory
     * Date:2017年9月25日下午9:44:08
     * Copyright (c) 2017, 2692613726@qq.com All Rights Reserved.
     *
    */
    
    package com.louis.abstractfactory;
    /**
     * ClassName:Client 
     * Function: TODO ADD FUNCTION. 
     * Reason:     TODO ADD REASON. 
     * Date:     2017年9月25日 下午9:44:08 
     * @author   michael
     * @version  
     * @since    JDK 1.7
     * @see      
     */
    public class Client {
        public static void main(String[] args) {
            //用户指定用哪个cpu或者mainboard
            ComputerEngineer computerEngineer = new ComputerEngineer();
            AbstractFactory aFactory = new IntelFactory();
            computerEngineer.makeComputer(aFactory);
        
        }
    }

  • 相关阅读:
    使用JSONPath
    JSON 返回值JSONPath Syntax
    IntelliJ IDEA 打包Maven 构建的 Java 项目
    JMeter(7) 优化判断返回类型和返回值
    Windows copy
    Windows del
    Windows exit
    Windows netsh
    Windows start
    Windows taskkill
  • 原文地址:https://www.cnblogs.com/Michael2397/p/7580675.html
Copyright © 2020-2023  润新知