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

    模式定义

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

    模式结构

     模式分析

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

    优点:

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

    测试结果

  • 相关阅读:
    linux下tomcat之too many open files
    oracle之Io异常: Got minus one from a read call
    oracle监听模块异常
    面向对象分析与面向结构分析
    jdbc连接oracle出现ORA-12505错误
    git命令行入门
    oracle之远程数据投毒漏洞(CVE-2012-1675)修复
    sql盲注
    springboot日志配置Logback
    Java 多线程 重入锁
  • 原文地址:https://www.cnblogs.com/2016-zck/p/13864784.html
Copyright © 2011-2022 走看看