zoukankan      html  css  js  c++  java
  • 抽象工厂模式

    (原文转自: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);
        
        }
    }

  • 相关阅读:
    Python函数式编程学习笔记
    DOS常用命令总结
    Python高级特性学习笔记
    Git bash使用中...
    《零基础入门学习Python》学习过程笔记【30模块中的函数,os模块,ospath模块中的函数(看了一点)】
    这两天将这段时间的python笔记常用知识复习了一遍...前天半夜吃了盘烤羊肉..得了急性肠炎
    《零基础入门学习Python》学习过程笔记【29对文件进行分割】(没看)
    《零基础入门学习Python》学习过程笔记【28文件】
    《零基础入门学习Python》学习过程笔记【27集合】
    用python写一个简单的用户登陆程序(要求写成函数)
  • 原文地址:https://www.cnblogs.com/Michael2397/p/7580675.html
Copyright © 2011-2022 走看看