• 设计模式之工厂方法模式


    什么是工厂方法模式

    工厂方法模式(Factory Method pattern)是一种常用的对象创建型设计模式,此模式的核心精神是封装类中不变的部分,提取其中个性化善变的部分为独立类,通过依赖注入以达到解耦、复用和方便后期维护拓展的目的。

    它的核心结构有四个角色,分别是抽象工厂;具体工厂;抽象产品;具体产品

    工厂方法模式是简单工厂模式的衍生,解决了许多简单工厂模式的问题。

    首先完全实现‘开-闭 原则’,实现了可扩展。其次更复杂的层次结构,可以应用于产品结果复杂的场合。
    工厂方法模式对简单工厂模式进行了抽象。有一个抽象的Factory类(可以是抽象类和接口),这个类将不再负责具体的产品生产,而是只制定一些规范,具体的生产工作由其子类去完成。在这个模式中,工厂类和产品类往往可以依次对应。即一个抽象工厂对应一个抽象产品,一个具体工厂对应一个具体产品,这个具体的工厂就负责生产对应的产品。
    工厂方法模式是最典型的模板方法模式(Template Method pattern)应用。
     

    总结:

    基于面向接口编程的原理,创建部分成为抽象工厂与实体工厂,创建出的对象成为抽象产品与实体产品。

    你可能知道为什么它能解决上面的问题了:多了一个新对象,只需添加一套对应的工厂和产品就可以了,不需要修改原代码,或只需进行少量的修改

    代码示例:

    //抽象工厂
    public interface Icarfactory {
              public Icar createCar();
    } 
    
    //具体工厂
    public class bmwFactory implements Icarfactory {
              public Icar createCar() {
                       return new bwm();
              }
    } 
     
    public class buickFactory implements Icarfactory {
              public Icar createCar() {
                       return new buick();
              }
    } 
    
    //抽象产品
    public interface Icar {
               public void docar();
    }
     
    //具体产品
    public class bwm implements Icar {
              public void docar() {
                   System.out.println("我是宝马,别摸我");
              }
    }
     
    public class buick implements Icar {
              public void docar(){
                   System.out.println("我是别克,很酷");
              }
    }
     
     //测试 
    public class test {
          public static void main(String []args) {
               //实体工厂实现抽象工厂,实体产品实现抽象产品;抽象工厂生产抽象产品,实体工厂生产实体产
               //品;实体工厂A生产实体产品A,实体工厂B生产实体产品B。
               Icarfactory factory=new bmwFactory();
               Icar bwm= factory.createCar(); 
               bwm.docar();
     
               factory=new buickFactory();
               Icar buick= factory.createCar(); 
               buick.docar();
         }
     }
  • 相关阅读:
    Html
    git和github简易教程
    Java基础
    如何学习一门语言
    leetcode题解(持续更新)
    浅谈安全威胁+引子
    内网渗透基础
    Java运算符
    Java修饰符
    Java变量类型
  • 原文地址:https://www.cnblogs.com/sanjun/p/7923047.html
Copyright © 2020-2023  润新知