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

    一、工厂模式介绍

    1、定义与类型

    定义:定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类,即工厂方法让类的实例化推迟到子类中进行。
    类型:创建型

    2、使用场景

    创建对象需要大量重复的代码
    客户端(应用层)不依赖于产品类示例如何被创建、实现等细节
    一个类通过其子类来指定创建哪个对象

    3、优点

    用户只需要关心所需产品对应的工厂,无须关心创建细节
    加入新产品符合开闭原则,提高可扩展性

    4、缺点

    类的个数容易过多,增加复杂度
    增加了系统的抽象性和理解难度

    二、 代码示例

    抽象产品类:

    public abstract class Video {
        public abstract void produce();
    }

    实现产品类1:

    public class PythonVideo extends Video {
        @Override
        public void produce() {
            System.out.println("录制Python课程视频");
        }
    }

    实现产品类2:

    public class JavaVideo extends Video {
        @Override
        public void produce() {
            System.out.println("录制Java课程视频");
        }
    }

    实现产品类3:

    public class FEVideo extends Video{
        @Override
        public void produce() {
            System.out.println("录制FE课程视频");
        }
    }

    抽象工厂类:

    public abstract class VideoFactory {
        public abstract Video getVideo();
    }

    实现工厂类1:

    public class JavaVideoFactory extends VideoFactory {
        @Override
        public Video getVideo() {
            return new JavaVideo();
        }
    }

    实现工厂类2:

    public class PythonVideoFactory extends VideoFactory {
        @Override
        public Video getVideo() {
            return new PythonVideo();
        }
    }

    实现工厂类3:

    public class FEVideoFactory extends VideoFactory{
        @Override
        public Video getVideo() {
            return new FEVideo();
        }
    }

    测试类:

    public class Test {
        public static void main(String[] args) {
            VideoFactory videoFactory = new PythonVideoFactory();
            VideoFactory videoFactory2 = new JavaVideoFactory();
            VideoFactory videoFactory3 = new FEVideoFactory();
            Video video = videoFactory.getVideo();
            video.produce();
        }
    }

    类图:

    三、 源码示例

    1、JDK中的集合类

    父类定义:

    子类实现,并返回特定的“产品类”:

  • 相关阅读:
    Oracle 10gR2 Dataguard搭建(非duplicate方式)
    Linux scp 设置nohup后台运行
    Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part3:db安装和升级
    Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part2:clusterware安装和升级
    eclipse debug模式下总是自动跳到ThreadPoolExecutor.java类
    eclipse maven build、maven clean、maven install和maven test的区别 精析
    燕麦工作室第一卷:火力地堡高清下载
    java 泛型 精析
    任志强商学课:用企业家的思维理解商业 下载
    NodeJs编写小爬虫
  • 原文地址:https://www.cnblogs.com/weixk/p/12866813.html
Copyright © 2011-2022 走看看