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 || 点返回首页

  • 相关阅读:
    003.同时Ping多个IP(select实现IO复用,信号计时),ping程序升级版
    002.ICMP--拼接ICMP包,实现简单Ping程序(原始套接字)
    001.linux下clock()检测程序运行时间
    django form的函数用法
    命令注入利用语句
    小白审计JACKSON反序列化漏洞
    代码审计小工具
    Burp插件开发--应用篇
    burp插件开发--基础篇
    JAVA web网站代码审计--入门
  • 原文地址:https://www.cnblogs.com/aeon/p/10301817.html
Copyright © 2011-2022 走看看