• 工厂方法模式


    模式定义

    工厂方法模式:又称为静态工厂模式,也叫做虚拟构造器模式和多态工厂模式,他属于类创造模式。在工厂模式中。工厂父类负责定义创建产品对象的公共接口,而工厂子类负责生成具体产品对象。

    模式结构

     模式分析

    工厂模式是简单工厂模式的进一步抽象和推广。在工厂方法模式中,核心的工厂类不再负责所有具体产品的创建,而是将生成具体产品类交给子工厂类完成。工厂类和产品类具有平行的等级结构,往往一一对应。

    优点:

    (1)用户只需关心产品类对应的工厂类,无需关心具体创建细节。

    (2)可以由工厂自主确定创建何种产品对象,而如何创建对象的细节完全封装在内部。

    (3)系统加入新产品无需修改工厂及接口,而只要添加一个实体类和一个实体类的工厂即可。

    缺点:

    (1)在添加新的产品时,会创建新的实体类和工厂类,在一定程度上增加了系统复杂性,在编译和运行带来了额外开销。

    (2)会增加系统的类数,在一定程度上增加了系统的复杂度和理解难度

    (3)系统扩展困难,不利于系统的扩展和维护。

    电视案例

    TV接口类

    package com.zck.factoryfunction;
    
    public interface TV {
        public void play();
    }

    HaierTV类

    package com.zck.factoryfunction;
    
    public class HaierTV implements TV {
        public void play() {
            System.out.print("海尔电视正在播放
    ");
        }
    }

    HisenseTV类

    package com.zck.factoryfunction;
    
    public class HisenseTV implements TV {
        public void play() {
            System.out.print("海信电视正在播放
    ");
        }
    }

    factory接口类

    package com.zck.factoryfunction;
    
    public interface TVFactory {
        public TV produceTV();
    }

    HaierTVFaction类

    package com.zck.factoryfunction;
    
    public class HaierTVFactory implements TVFactory {
    
        public TV produceTV() {
            return new HaierTV();
        }
    }

    HisenseTVFActory类

    package com.zck.factoryfunction;
    
    public class HisenseTVFactory implements TVFactory {
    
        public TV produceTV() {
            return new HisenseTV();
        }
    }

    Client类

    package com.zck.factoryfunction;
    
    public class Client {
    
        public static void main(String[] args) {
            TV tv1,tv2;
            TVFactory tvFactory1 = new HaierTVFactory() ;
            TVFactory tvFactory2 = new HisenseTVFactory() ;
            tv1 = tvFactory1.produceTV();
            tv1.play();
            tv2 = tvFactory2.produceTV();
            tv2.play();
        }
    }

    测试结果

  • 相关阅读:
    54:代码审计-TP5框架审计写法分析及代码追踪
    53:代码审计-TP5框架及无框架变量覆盖反序列化
    52:代码审计-PHP项目类RCE及文件包含下载删除
    51:代码审计-PHP框架MVC类上传断点调试挖掘
    支配树学习笔记
    模拟费用流学习笔记
    python之元类、双下方法( 双下方法也叫魔术方法、 内置方法)
    java 注解
    java 反射
    java synchronized
  • 原文地址:https://www.cnblogs.com/2016-zck/p/13864784.html
Copyright © 2020-2023  润新知