zoukankan      html  css  js  c++  java
  • 工厂模式_工厂方法模式

    一、工厂方法模式 

    为了避免简单工厂模式的缺点,不完全满足OCP。工厂方法模式和简单工厂模式最大的不同在于,简单工厂模式只有一个(对于一个项目或者一个独立模块而言)工厂类,而工厂方法模式有一组实现了相同接口的工厂类。

      1.1 车接口  

    package edu.aeon.model.factory.factorymethod;
    /**
     * [说明]:车类型接口
     * @author aeon(qq:1584875179)
     */
    public interface Car {
        void run();
    }

      1.2宝马类  

    package edu.aeon.model.factory.factorymethod;
    /**
     * [说明]:宝马类
     * @author aeon(qq:1584875179)
     *
     */
    public class BMW implements Car {
    
        @Override
        public void run() {
            System.out.println("宝马在跑!");
        }
    
    }

      1.3比亚迪类    

    package edu.aeon.model.factory.factorymethod;
    /**
     * [说明]:比亚迪类
     * @author aeon(qq:1584875179)
     *
     */
    public class Byd implements Car {
    
        @Override
        public void run() {
            System.out.println("比亚迪在跑!");
        }
    
    }

      1.4生产车的顶级接口  

    package edu.aeon.model.factory.factorymethod;
    /**
     * [说明]:生产车接口
     * @author aeon(qq:1584875179)
     *
     */
    public interface CarFactory {
        Car createCar();
    }

      1.5宝马工厂类    

    package edu.aeon.model.factory.factorymethod;
    /**
     * [说明]:生产宝马工厂类
     * @author aeon(qq:1584875179)
     *
     */
    public class BMWFactory implements CarFactory {
    
        @Override
        public Car createCar() {
            return new BMW();
        }
    
    }

      1.6 比亚迪工厂类    

    package edu.aeon.model.factory.factorymethod;
    /**
     * [说明]:比亚迪工厂类
     * @author aeon(qq:1584875179)
     *
     */
    public class BydFactory implements CarFactory {
    
        @Override
        public Car createCar() {
            return new Byd();
        }
    
    }

      1.7 工厂方法模式测试类    

    package edu.aeon.model.factory.factorymethod;
    /**
     * [说明]:工厂方法模式测试
     * @author aeon(qq:1584875179)
     *
     */
    public class TestFactoryMethod {
    
        public static void main(String[] args) {
            Car car1=new BMWFactory().createCar();
            Car car2=new BydFactory().createCar();
            car1.run();
            car2.run();
        }
    
    }

        测试结果截图:

        

        这样在以后业务扩展时,我们不需要修改原有代码,通过新添类来实现业务的扩展(增加),完全符合面向对象的程序设计规则(OCP原则),但是相应的曾加了很多类。

    如有任何疑问可联系邮箱: 给我发邮件、或直接联系QQ:1584875179 || 点返回首页

  • 相关阅读:
    CentOS 6.5下快速搭建ftp服务器
    Ubuntu增加swap交换空间的步骤
    mysql官方下载安装教程(centos)
    阿里云上遇到: virtual memory exhausted: Cannot allocate memory
    解决nginx: [error] open() "/usr/local/nginx/logs/nginx.pid" failed错误
    centos安装nodejs和配置npm
    JavaScript(二)-精简
    JavaScript(一)
    ease,seae-in,ease-in-out,ease-out区别
    安装 sass 文档
  • 原文地址:https://www.cnblogs.com/aeon/p/10301817.html
Copyright © 2011-2022 走看看