zoukankan      html  css  js  c++  java
  • 设计模式之工厂方法

    工厂方法:
    百度百科的定义:
          工厂方法模式(FACTORYMETHOD)是一种常用的对象创建型设计模式,此模式的核心精神是封装类中不变的部分,
    提取其中个性化善变的部分为独立类,通过依赖注入以达到解耦、复用和方便后期维护拓展的目的。它的核心结构有四个角色,
    分别是抽象工厂;具体工厂;抽象产品;具体产品

    UML类图


    具体的代码

    public interface Creator {
        ICar createCar();
    }
    
    public class BenzCreator implements Creator {
        @Override
        public ICar createCar() {
             return new BenzCar();
        }
    }
    
    public class BmwCreator implements Creator {
        @Override
        public ICar createCar() {
            return new BmwCar();
        }
    }
    
    public interface ICar {
        void run();
    }
    
    public class BenzCar implements ICar {
        @Override
        public void run() {
            System.out.println("Benz is Running");
        }
    }
    
    public class BmwCar implements ICar {
        @Override
        public void run() {
           System.out.println("BWM is Running");
        }
    }
    
    public class Client {
        public static void main(String[] args) {
            Creator benzCreator = new BenzCreator();
            benzCreator.createCar().run();
    
            Creator bmwCreator = new BmwCreator();
            bmwCreator.createCar().run();
        }
    }                    

    具体角色

    接口 Creator 的角色为抽象工厂所有的具体工厂继承抽象工厂
    实现类 BenzCreator 和 BmwCreator为具体的工厂,用户创建对应产品的实例
    接口 ICar 的角色为产品的抽象产品,所有的具体产品继承抽象产品
    实现类 BenzCar 和 BmwCar 为具体的产品,实现具体产品的行为


    具体应用场景:

    引用下《设计模式:可复用面向对象软件的基础》
    ”为创建一个对象定义一个接口,但把具体创建哪个类的实例留给子类决定。工厂方法允许将一个类的初始化延迟到自己的子类“
    工厂方法模式的使用场合
    客户端不知道它要创建的具体是哪一个子类。
    一个类想要由自己的子类来定义某对象的创建过程。
    类将创建某对象的职责代理给一些帮助子类中的一个,并且你想要将哪一个子类作为代理的信息进行局部化。

    优缺点:
    优点:
          在工厂方法中,用户只需要知道所要产品的具体工厂,无须关系具体的创建过程,甚至不需要具体产品类的类名。
          在系统增加新的产品时,我们只需要添加一个具体产品类和对应的实现工厂,无需对原工厂进行任何修改,很好地符合了“开闭原则”。

    缺点:
          每次增加一个产品时,都需要增加一个具体类和对象实现工厂,是的系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。这并不是什么好事。

  • 相关阅读:
    车辆调度管理系统开发(八)
    车辆调度管理系统开发(七)
    车辆调度管理系统开发(六)
    车辆调度管理系统开发(五)
    车辆调度管理系统开发(四)
    设计模式
    webpack配置
    ECharts 配置语法
    react性能
    web安全
  • 原文地址:https://www.cnblogs.com/daily-note/p/6991952.html
Copyright © 2011-2022 走看看