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

    简单工厂模式有一个缺陷,那就是不符合OCP开闭原则,当我们想生产一辆新品种车型时,必须修改简单工厂类源码。而工厂模式由于一种工厂只生产一种产品。当我们需要生产一辆新品种汽车,只需要新建一个新品类的工厂即可,即对增加开放,对修改关闭。符合开闭原则。

    在UML图上可以清晰的看出,工厂模式只比简单工厂模式多一个角色:抽象工厂,其可以是抽象类也可以是接口,还是以生产汽车为例举例说明工厂方法设计模式的原理

    public class FactoryDemo {
      interface Car {
        void run();
    
        void stop();
    
        String brand();
      }
    
      static class BMW540Li implements Car {
    
        @Override
        public void run() {
          System.out.println("BMW540Li启动");
        }
    
        @Override
        public void stop() {
          System.out.println("BMW540Li停止");
        }
    
        @Override
        public String brand() {
          return "宝马";
        }
      }
    
      static class AudiA7 implements Car {
    
        @Override
        public void run() {
          System.out.println("AudiA7启动");
        }
    
        @Override
        public void stop() {
          System.out.println("AudiA7停止");
        }
    
        @Override
        public String brand() {
          return "奥迪";
        }
      }
    
      interface CarFactroy{
        Car factory();
      }
    
      static class BMWFactory implements CarFactroy{
        @Override
        public Car factory() {
          return new BMW540Li();
        }
      }
    
      static class AudiFactory implements CarFactroy{
        @Override
        public Car factory() {
          return new AudiA7();
        }
      }
    
    
      public static void main(String[] args) {
        BMWFactory bmwFactory = new BMWFactory();
        Car car1 = bmwFactory.factory();
        car1.run();
        car1.stop();
        System.out.println("我的品牌是:"+car1.brand());
    
        System.out.println("----------------------");
    
        AudiFactory audiFactory = new AudiFactory();
        Car car2 = audiFactory.factory();
        car2.run();
        car2.stop();
        System.out.println("我的品牌是:"+car2.brand());
      }
    }


    BMW540Li启动
    BMW540Li停止
    我的品牌是:宝马
    ----------------------
    AudiA7启动
    AudiA7停止
    我的品牌是:奥迪
    
    
    
     
  • 相关阅读:
    流量控制-QoS
    网关冗余-HSRP
    EIGRP负载均衡
    NAT负载均衡
    VLAN是什么
    交换机宽带优化、端口聚合
    二层安全之MAC Flooding解析与解决方法
    弱安全协议探测工具-sslciphercheck
    OpenSSL 与 SSL 数字证书概念贴
    【Linux安全】查看是否存在特权用户以及是否存在空口令用户
  • 原文地址:https://www.cnblogs.com/sstone/p/8465961.html
Copyright © 2011-2022 走看看