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

    两种方式的对比

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

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

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

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

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

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

  • 相关阅读:
    银行数据仓库体系实践(6)--调度系统
    银行数据仓库体系实践(5)--数据转换
    银行数据仓库体系实践(4)--数据抽取和加载
    银行数据仓库体系实践(3)--数据架构
    银行数据仓库体系实践(2)--系统架构
    银行数据仓库体系实践(1)--银行数据仓库简介
    敏捷开发和传统开发区别
    source ~/.bash_profile是什么意思
    oracle里的DBLINK是做什么的
    flex-direction的值及使用效果
  • 原文地址:https://www.cnblogs.com/mjjh/p/13296056.html
Copyright © 2011-2022 走看看