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();
        }
    }
    

    两种方式的对比

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

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

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

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

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

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

  • 相关阅读:
    jhat:虚拟机堆转储快照分析工具
    jmap:java内存影像工具
    jinfo:Java配置信息工具
    jstat:虚拟机统计信息监视工具
    jps:虚拟机进程状况工具
    jdk工具总领
    到底是"/"还是"/*"
    jdk_keytool
    html地图定位
    java 手机号码归属地查询
  • 原文地址:https://www.cnblogs.com/mjjh/p/13296056.html
Copyright © 2011-2022 走看看