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中的集合类

    父类定义:

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

  • 相关阅读:
    javascsript 去除数组重复数据
    javascript监听事件兼容
    javascript紧接上一张for循环的问题,我自己的理解
    javascript解决for循环中i取值的问题(转载)
    javascript 模仿 html5 placeholder
    javascript构造函数+原形继承+作用域扩充
    css画下图
    jquery商城类封装插件
    JEECG01-开发入门环境搭建成功
    Perl学习笔记(九)--文件(四)
  • 原文地址:https://www.cnblogs.com/weixk/p/12866813.html
Copyright © 2011-2022 走看看