资讯专栏INFORMATION COLUMN

工厂方法

zhiwei / 3100人阅读

摘要:工厂方法定义定义一个创建对象的接口,但让实现这个接口的类决定实例化哪个类,工厂方法让类的实例化推迟到子类中进行。优点用户只需要关心所需产品对应的工厂,无需关心创建的细节。加入新产品符合开闭原则,提高可扩展性。

工厂方法

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

类型创建型

适用场景

创建对象需要大量重复的代码

客户端(应用层)不依赖于产品类实例如何被创建、实现等细节。

一个类通过其子类来指定创建哪个对象。

优点

用户只需要关心所需产品对应的工厂,无需关心创建的细节。

加入新产品符合开闭原则,提高可扩展性。

缺点

类的个数容易过多,增加复杂度。

增加了系统的抽象性和理解难度。

案例
public abstract class Video {
    public abstract void produce();

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

    public abstract Video getVideo();
}
public class JavaVideoFactory extends VideoFactory {
    @Override
    public Video getVideo() {
        return new JavaVideo();
    }
}
public class PythonVideoFactory extends VideoFactory {
    @Override
    public Video getVideo() {
        return new PythonVideo();
    }
}
public class Test {
    public static void main(String[] args) {
        VideoFactory videoFactory = new PythonVideoFactory();
        Video video = videoFactory.getVideo();
        video.produce();
    }
}

可扩展性:
增加一个前端视频:

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

重点:videoFactory把创建具体某个视频的职责交由子类来实现。这里Video是产品,FEVideo、PythonVideo、JavaVideo是实际的产品,VideoFactory是创建者,而FEVideoFactory、PythonVideoFactory、JavaVideoFactory是实际的创建者

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/74966.html

相关文章

  • JavaScript工厂模式

    摘要:基于工厂角色和产品角色的多态性设计是工厂方法模式的关键。工厂方法模式之所以又被称为多态工厂模式,是因为所有的具体工厂类都具有同一抽象父类。工厂方法模式总结工厂方法模式是简单工厂模式的进一步抽象和推广。 JavaScript工厂模式 首先需要说一下工厂模式。工厂模式根据抽象程度的不同分为三种 简单工厂模式 工厂方法模式 抽象工厂模式 1.简单工厂模式 简单工厂模式:又称为静态工厂方法...

    oujie 评论0 收藏0
  • Java 设计模式之工厂模式

    摘要:与以往的使用的方式不同,工厂模式使用工厂实例化对象。抽象工厂模式亮相抽象工厂模式抽象工厂模式提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。 写在前面 这篇博文介绍设计模式的形式将与其他篇博文不太一样,这里我们将从一个问题入手,逐步了解到简单工厂、工厂方法与抽象工厂模式。 PS:这篇博文涉及的内容较多,所以篇幅有点长,请耐心阅读。 为什么要使用工厂模式? 在 OO ...

    Jochen 评论0 收藏0
  • 工厂模式-设计模式

    摘要:不过怎么来说工厂方法模式是简单工厂模式的升级版。其次,工厂模式是一种典型的解耦模式,迪米特法则在工厂模式中表现的尤为明显。 工厂模式想必大家在开发过程中会经常用到,顾名思义其就是作为一个工厂用来生产产品的,下面来简单介绍几种常见的工厂模式。 0x01 简单工厂模式 1、类图结构showImg(/img/bVFf1t?w=531&h=278); 2、角色分类 工厂类:其内部具有一点的判...

    HtmlCssJs 评论0 收藏0
  • 设计模式学习笔记:工厂模式

    摘要:二简单工厂模式组成工厂类工厂模式的核心,通过调用它来实现其他类的功能。三工厂方法模式利用工厂方法模式可以有效解决简单工厂模式破坏开闭原则的问题。 一、概念 1、工厂模式分为三类:(1)简单工厂模式:一个工厂创建所有产品(2)工厂方法模式:一个工厂方法创建一个产品(3)抽象工厂模式:一个工厂方法创建一类产品 2、创建型模式这种模式是指将实例的创建和使用分离开来,隐藏类实例的创建细节,外界...

    luxixing 评论0 收藏0
  • python设计模式-抽象工厂模式

    摘要:源码参考抽象工厂模式抽象工厂模式提供一个接口,用于创建相关或依赖对象的家族,而不需要指定具体类。工厂方法模式和抽象工厂模式如何选择开始的时候,可以选择工厂方法模式,因为他很简单只需要继承,并实现工厂方法即可。 问题:在上一篇 python设计模式:工厂方法模式我们尝试使用工厂方法创建了披萨店,现在为了保证披萨加盟店也能有良好的声誉,我们需要统一原材料,这个该如何做呢? 为了确保每家加盟...

    seal_de 评论0 收藏0
  • PHP高级特性-反射Reflection以及Factory工厂设计模式的结合使用[代码实例]

    摘要:反射提供给面向对象编程可以自省的能力,即反射。在简单工厂模式中,根据传递的参数来返回不同的类的实例简单工厂模式又称为静态工厂方法模式。也就是简单工厂模式工厂工厂类。PHP高级特性-反射以及工厂设计模式的结合使用 [结合 Laravel-Admin 代码实例讲解]利用反射来实现工厂模式的生产而无需创建特定的工厂类本文地址http://janrs.com/?p=833转载无需经过作者本人授权转载...

    番茄西红柿 评论0 收藏2637

发表评论

0条评论

zhiwei

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<