zoukankan      html  css  js  c++  java
  • 23种设计模式——工厂模式

    23种设计模式——工厂模式

    作用

    实现了创建者和调用者分离

    详细分类

    • 简单工厂模式
    • 工厂方法模式
    • 抽象工厂模式

    核心本质

    • 实例化对象不使用new,用工厂方法代替

    • 将选择实现类,创建对象统一管理和控制。从而将调用者跟我们的实现类解耦

    1)简单工厂(静态工厂模式)

    虽然某种程度上不符合设计原则,但实际用的最多

    package com.mjh.factory.simple;
    
    public interface Car {
        void name();
    }
    
    package com.mjh.factory.simple;
    
    public class AoDi implements Car {
        @Override
        public void name() {
            System.out.println("奥迪");
        }
    }
    
    package com.mjh.factory.simple;
    
    public class TesLa implements Car {
        @Override
        public void name() {
            System.out.println("特斯拉");
        }
    }
    
    package com.mjh.factory.simple;
    
    //静态工厂模式
    //增加一个新产品,如果你不修改代码,做不到的
    
    //开闭原则
    public class CarFactory {
        public static Car getCar(String car){
    
            //方法一
            if(car.equals("奥迪")){
                return new AoDi();
            }else  if(car.equals("特斯拉")){
                return new TesLa();
            }else {
                return null;
            }
        }
    
        //方法二
        public  static Car getAoDi(){
            return new AoDi();
        }
        public  static Car getTesLa(){
            return new TesLa();
        }
    
    }
    
    package com.mjh.factory.simple;
    
    public class Impl {
        public static void main(String[] args) {
           /* Car car = new AoDi();
            Car car1 = new TesLa();  不用new创建了,只需创建一个工厂*/
    
           //使用工厂创建
            Car car = CarFactory.getCar("奥迪");
            Car car1= CarFactory.getCar("特斯拉");
            car.name();
            car1.name();
    
        }
    }
    

    2)工厂方法模式

    不修改已有的类的前提下,通过增加新的工厂实现扩展

    package com.mjh.factory.method;
    
    public interface Car {
        void name();
    }
    
    package com.mjh.factory.method;
    
    public interface CarFactory {
        Car getCar();
    }
    
    package com.mjh.factory.method;
    
    public class AoDi implements Car {
        @Override
        public void name() {
            System.out.println("奥迪");
        }
    }
    
    package com.mjh.factory.method;
    
    public class AoDiFactory implements CarFactory {
        @Override
        public Car getCar() {
            return new AoDi();
        }
    }
    
    package com.mjh.factory.method;
    
    public class Impl {
        public static void main(String[] args) {
            Car car = new AoDiFactory().getCar();
            Car car1 = new TesLaFactory().getCar();
            car.name();
            car1.name();
        }
    }
    

    两种方式的对比

    结构复杂度:简单工厂方法

    代码复杂度:简单工厂方法

    编程复杂度:简单工厂方法

    管理上的复杂度:简单工厂方法

    根据设计原则:工厂方法模式

    根据实际业务:简单工厂模式

  • 相关阅读:
    java实现获取当前年月日 小时 分钟 秒 毫秒
    四种常见的 POST 提交数据方式(application/x-www-form-urlencoded,multipart/form-data,application/json,text/xml)
    Cannot send, channel has already failed:
    Java 枚举(enum) 详解7种常见的用法
    C语言指针详解(经典,非常详细)
    ActiveMQ进阶配置
    Frame size of 257 MB larger than max allowed 100 MB
    SpringJMS解析--监听器
    SpringJMS解析-JmsTemplate
    delphi 修改代码补全的快捷键(由Ctrl+Space 改为 Ctrl + alt + Space)
  • 原文地址:https://www.cnblogs.com/mjjh/p/13296056.html
Copyright © 2011-2022 走看看