• 工厂模式


    简单工厂

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

    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等。

  • 相关阅读:
    Educational Codeforces Round 126 (Rated for Div. 2)
    Google Code Jam 2022 Qualification Round
    Codeforces Round #780 (Div. 3)
    AtCoder Beginner Contest 247
    AtCoder Beginner Contest 245
    Google Code Jam 2022 Round1A
    AtCoder Beginner Contest 245 Ex Product Modulo 2
    Codeforces Round #781 (Div. 2)
    EXSIVM使用模板创建虚拟机报错
    Hadoop单机/伪分布式配置安装教程
  • 原文地址:https://www.cnblogs.com/PoetryAndYou/p/11878876.html
Copyright © 2020-2023  润新知