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

    测试结果

  • 相关阅读:
    Windows Server 2012上PHP运行环境搭建的简易教程(Win08适用)
    Windows 8.1 系统ISO镜像下载或自Win8应用商店升级方法
    dojo布局(layout)
    dojo创建tree
    Postgres SQL学习笔记
    PostGIS ShapeFile 导入数据
    利用 PortableBasemapServer 发布地图服务
    Fortran 笔记
    ArcMap 操作笔记
    gdal编译C#开发版本
  • 原文地址:https://www.cnblogs.com/2016-zck/p/13864784.html
Copyright © 2011-2022 走看看