zoukankan      html  css  js  c++  java
  • 狂神设计模式笔记-工厂模式

    核心本质:

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

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

    详细分类:

    • 简单工厂模式:用来生产同一等级结构中的任意产品(对于增加新的产品,需要修改已有代码)
    • 工厂方法模式:用来生产同一等级结构中的固定产品(支持增加任意产品)
    • 抽象工厂模式:围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。

    满足OOP七大原则中的三个:

    • 开闭原则: 一个软件的实体应当对扩展开放,对修改关闭
    • 依赖倒转原则: 要针对接口编程,不要针对实现编程
    • 迪米特法则: 只与你直接的朋友通信,而避免和陌生人通信

    一、简单工厂模式

    举一个客户买车的示例(客户自己不去new车(不用关心车怎么实现的细节),而是通过工厂生产车,减少硬编码):

    public interface Car{
        void name();
    }
    
    public class Bench implements Car{
        @Override
        public void name() {
           System.out.println("奔驰车");
        }
    }
    
    public class Baoma implements Car{
        @Override
        public void name() {
            System.out.println("宝马车");
        }  
    }
    
    //静态(简单)工厂模式
    public class CarFactory {
        public static Car getCar(String car){
            if(car.equals("奔驰"))
                return new Bench();
            else if(car.equals("宝马"))
                return new Baoma();
            else
                return null;
        }
    }
    
    public class Customer {
        public static void main(String[] args) {
            Car car = CarFactory.getCar("奔驰");
            car.name();
        }
    }
    

    :大多数情况下用的都是简单工厂模式,这种模式仍有不足,如果再增加一辆车,则会修改CarFactory.java的getCar方法,违反了开闭原则,我们应该扩展,不应该修改。

    二、工厂方法模型

    我们新建一个CarFactory的接口,然后为每种Car都建一个Factory类。这样就可以使得每次新加入一种车时,只为这种车建立一个对应的工厂就行,不会影响到原来的代码。

    public interface CarFactory {
        Car getCar();
    }
    
    public class BenchFactory implements CarFactory{
        @Override
        public Car getCar() {
            return new Bench();
        }
    }
    
    public class Customer {
        public static void main(String[] args) {
            Car car = new BenchFactory().getCar();
            car.name();
        }
    }
    

    优点:下次加入一种大众车,只需要新建一个 DazhongFactory 就行,不会影响到别的工厂。

    缺点:代码量加大,管理复杂,结构复杂,实际业务一般使用简单工厂模式

    总结:不一定要符合设计原则,要根据实际情况加以分析取舍

    ,只需要新建一个 DazhongFactory 就行,不会影响到别的工厂。

    缺点:代码量加大,管理复杂,结构复杂,实际业务一般使用简单工厂模式

    总结:不一定要符合设计原则,要根据实际情况加以分析取舍

  • 相关阅读:
    记录:2019-06-15
    安卓APP环境搭建
    delphi 各版本的特性
    php.ini文件下载
    mysql数据库目录my.ini的内容
    Windows2008 R2 X64 PHP环境搭建步骤
    窗口关闭时弹出内存不能为read
    Delphi编译选项
    Android中EditText无法再次获得焦点
    Android设置分隔线
  • 原文地址:https://www.cnblogs.com/theory/p/13338737.html
Copyright © 2011-2022 走看看