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

    简单工厂

    由一个工厂对象决定创建出哪一种产品类的实例。

    jdk中的实例 calender

    工厂方法

    定义一个创建对象的接口

    但让实现这个接口的类来决定实例化哪个类

    工厂方法让类的实例化推迟到子类中进行。

    • 使用场景
      1. 创建对象需要大量重复代码
      2. 客户端不依赖于产品类实例如何被创建、实例等细节
      3. 一个类通过其子类来指定创建哪个对象
    • 优点:
      1. 用户只需要关心所需产品对应的工厂,无须关心创建细节
      2. 加入新产品符合开闭原则,提高可扩展性
    • 缺点
      1. 类的个数容易过多,增加复杂度
      2. 增加了系统的抽象性和理解难度

    实例:

    Video抽象类,定义产品

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

    VideFactory抽象类,创建对象

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

    具体产品JavaVideo

    public class JavaVideo extends Video {
        @Override
        public void product() {
            System.out.println("java视频");
        }
    }
    

    具体产品PythonVideo

    public class PythonVideo extends Video {
        @Override
        public void product() {
            System.out.println("python视频");
        }
    }
    

    实例化JavaVideo,JavaVideoFactoryVideo

    public class JavaVideoFactoryVideo extends VideFactory  {
        @Override
        public Video getVideo() {
            return new JavaVideo();
        }
    }
    
    

    实例化pythonVideo,PythonVideoFactoryVideo

    public class PythonVideoFactoryVideo extends VideFactory {
    
        @Override
        public Video getVideo() {
            return new pythonVideo();
        }
    }
    
    

    测试类

    public class Test {
        public static void main(String[] args) {
            VideFactory videFactory = new JavaVideoFactoryVideo();//父类引用指向子类对象
            Video video = videFactory.getVideo(); //实例化Vido
            video.product();
            VideFactory videFactory1 = new PythonVideoFactoryVideo();//父类引用指向子类对象
            Video video1 = videFactory1.getVideo(); //实例化Vido
            video1.product();
        }
    }
    

    抽象工厂

    jdk中实例:iterator 、URLStreamHandlerFactory等。

  • 相关阅读:
    PyQt5-关闭窗体显示提示框(窗口界面显示器上居中)-5
    PyQt5-按钮关闭窗体-4
    PyQt5-显示提示消息文本-3
    PyQt5-显示一个窗体,设置标题和图标-2
    [bzoj1053][HAOI2007]反素数ant【暴力】
    [bzoj1083][SCOI2005]繁忙的都市【MST】
    [bzoj1088][SCOI2005]扫雷Mine【乱搞】
    [bzoj1070][SCOI2007]修车【费用流】
    [bzoj1087][SCOI2005]互不侵犯King【dp】
    [bzoj4558][JLoi2016]方【容斥原理】【计数】
  • 原文地址:https://www.cnblogs.com/PoetryAndYou/p/11878876.html
Copyright © 2011-2022 走看看