首页 > 其他分享 >面试官:工厂方法模式是什么?

面试官:工厂方法模式是什么?

时间:2022-10-06 22:32:08浏览次数:50  
标签:面试官 show 模式 工厂 奇哥 苹果 public


真正的大师永远怀着一颗学徒的心
吃不了学习的苦就要吃生活的苦
文章持续更新,可以微信搜索【小奇JAVA面试】第一时间阅读,回复【资料】更有我为大家准备的福利哟!回复【项目】有我为大家准备的一些项目源码。回复【简历模板】有我为大家准备的简历模板。

面试官:工厂方法模式是什么?_java

文章目录


前言

今天的电子缝纫机厂依旧是热火朝天,小伙子们为了娶媳妇都干劲十足,把脚下的缝纫机踏板踩的直冒烟,就在我专心致志干活达到一种人机合一的状态时,突然厂房的门从外面推开了,来了一位新同事,本着不是自己的热闹就必须得看的原则,我和大家一样把目光缓缓的移向门口。

咦~,这人怎么看着这么眼熟呢?这不是网红电瓶哥吗,他怎么可能来打工呢。

面试官:工厂方法模式是什么?_简单工厂模式_02

趁中午吃饭之际,我找到电瓶哥。

我:“电瓶哥,你不是号称不可能打工的嘛,怎么也来这里打工了啊。”

电瓶哥:“我没有来打工啊,我是来干活的。”

我:“你特么的竟让我无言以对。。。是谁说通你来打工的呀,我挺好奇的。”

电瓶哥:“没有人劝我,是我看到了村口的广告,我准备挣钱找个婆娘。”

面试官:工厂方法模式是什么?_工厂类_03

我:“这广告效果真不错呀,通俗易懂又有诱惑力。”

就在这时我的手机突然响了。

我:“喂,这又是谁啊!”

对方:“我,还是昨天给你打电话面试的,你现在方便吗,咱们再聊会。”

我:“方便,只要是上班时间接电话我都方便。”

一、面试

面试官:咱们今天来聊聊工厂方法模式吧,你说一说你对工厂方法模式的理解?

我:工厂方法模式是简单工厂模式的延伸,它继承了简单工厂模式的优点,同时还弥补了简单工厂模式的缺陷。

面试官:你能说说工厂方法模式比简单工厂模式好在哪里吗?

我:在工厂方法模式中我们工厂类中的逻辑是根据传进来的参数来进行对应的,就是如果你想买苹果了,那你在工厂类中就得有根据苹果参数生成苹果实例的判断逻辑,当你突然想吃菠萝了,如果工厂类中之前没有这一块的逻辑,你就得去工厂类中增加这一块的逻辑了,这样你就会频繁的修改工厂类中的代码,这样就不符合开闭原则了。

而工厂方法模式在工厂类和产品之间增加了一个具体工厂,我们具体的产品通过具体的工厂来生产,不需要修改工厂类中的逻辑。

例如我们之前是“真甜呀果园”,你想吃苹果了直接给我们厂里打电话我们就给你邮寄一箱苹果。但是我们现在业务扩展了,我们开始养家禽了,如果你想吃鸡也可以给我们打电话,但是这个时候还给“真甜呀果园”打电话就有点不合适了。

所以我现在成立了一个奇哥集团,你想吃什么直接给奇哥集团打电话就行,假如你想吃苹果,你就打电话给奇哥集团,然后奇哥集团给下属的“真甜呀果园”打电话给你邮寄一箱苹果,假如你想吃鸡,你也给奇哥集团打电话,然后奇哥给下属的“真香呀鸡圈”打电话给你邮寄一只鸡。

面试官:那你说一下工厂方法模式有哪些角色吧!

1、Product(抽象产品):他是定义产品的接口,他在这里相当于装水果的箱子,或者装鸡的笼子。

2、ConcreteProduct(具体产品):他实现了抽象产品接口,他在这里相当于苹果或者鸡。

3、Factory(抽象工厂):他在这里相当于奇哥集团,他用于接收客户的电话,然后给客户一箱水果或者一笼鸡。

4、ConcreteFactory(具体工厂):他在这里相当于“真甜呀果园”或者“真香呀鸡圈”,他负责接收集团的电话然后给集团相应的产品。

面试官:那你可以写一下具体的代码来描述一下工厂方法模式吗?

1、首先定义一个箱子接口,这个代表抽象产品角色

public interface Box {
public void show();
}

2、然后定义一个苹果类,这个代表具体产品

public class Apple implements Box {
@Override
public void show() {
System.out.println("买了一箱苹果");
}
}

3、然后定义一个奇哥集团类,这个代表抽象工厂

public interface FactoryQG {
public void show(String name); //抽象工厂方法
}

4、然后定义一个“真香呀”类,这个代表具体工厂

public class Zxy implements FactoryQG {
Box box = null;
@Override
public void show(String name) {
if(name.equals("苹果")){
box = new Apple();
box.show();
System.out.println("真香呀果园苹果,50元一箱");
}
}
}

5、最后测试

public class Test {
public static void main(String[] args) {
FactoryQG factoryQG = new Zxy();
factoryQG.show("苹果");
}
}

面试官:工厂方法模式是什么?_简单工厂模式_04

通过上面的过程可以看出来,如果这个时候需要增加一个“鸡圈”,只需要增加一个具体工厂类即可,不需要修改抽象工厂类的代码,这样就符合对扩展开放,对修改关闭。

面试官:可以呀小伙子,什么时候有时间来公司入职呢?

我:再说吧,我先缝完手里这条秋裤再说。。。

二、总结

这里的相关内容还没有整理完毕,文章后面持续更新,建议收藏。

文章中涉及到的命令大家一定要像我一样每个都敲几遍,只有在敲的过程中才能发现自己对命令是否真正的掌握了。

如果觉得我的文章还不错的话就点个赞吧,另外可以微信搜索【小奇JAVA面试】第一时间阅读,回复【资料】更有我为大家准备的福利哟!回复【项目】有我为大家准备的一些项目源码。回复【简历模板】有我为大家准备的简历模板。


标签:面试官,show,模式,工厂,奇哥,苹果,public
From: https://blog.51cto.com/u_15631676/5734121

相关文章

  • 02第一章:【01】设计模式七大原则
    一、设计模式目的编写软件过程中,程序员面临着来自耦合性,内聚性以及可维护性,可扩展性,重用性,灵活性等多方面的挑战,设计模式是为了让程序(软件),具有更好代码重用性(即:相同......
  • JAVA23种设计模式综合项目(实战)
    随着软件开发人员人数的增多,一些公司急需一些高端人才。作为一个高端人才,设计面向对象软件是必不可少的能力,而软件设计是需要很深的功力,设计模式就要求你必须掌握,而本课程......
  • 01第一章:【01】设计模式前言
    一、经典的面试题1、原型设计模式问题有请使用UML类图画出原型模式核心角色原型设计模式的深拷贝和浅拷贝是什么,并写出深拷贝的两种方式的源码(重写clone方法实现......
  • 如何从分类层面,深入理解设计模式?
    学习过设计模式的都知道,设计模式分为三大类,分别是:创建型、结构型、行为型。但为什么它们这么分呢?某个设计模式为啥就属于结构型,而不属于行为型呢?创建型、结构型、行为型它......
  • 大白话聊访问者模式:从入门到实践
    访问者模式,重点在于访问者二字。说到访问,我们脑海中必定会想起新闻访谈,两个人面对面坐在一起。从字面上的意思理解:其实就相当于被访问者(某个公众人物)把访问者(记者)当成了外人......
  • 深度剖析Java的volatile实现原理,再也不怕面试官问了
    1\.volatile是什么?volatile是Java提供的一种轻量级的同步机制。与synchronized修饰方法、代码块不同,volatile只用来修饰变量。并且与synchronized、ReentrantLock等重量级......
  • 设计模式之建造者模式-案例代码
    1、类图   2、代码实例publicabstractclassConditionBuilder{publicabstractvoidbuildOrderId();publicabstractvoidbuildOrderType();......
  • 设计模式 创建型
    Java设计模式学习本文作者:MrBird本文链接:http://mrbird.cc/Java设计模式.html本文仅为个人学习整理转载创建型模式简单工厂模式简单工厂模式严格意义上来说,并不......
  • 设计模式之备忘录模式
    备忘录模式概念Memento isabehavioraldesignpatternthatletsyousaveandrestorethepreviousstateofanobjectwithoutrevealingthedetailsofits i......
  • 014——static应用知识:单例设计模式
    static应用知识:单例设计模式设计模式开发中经常遇到一些问题,一个问题通常有n种解法的,但其中肯定有一种解法是最优的,这个最优的解法被人总结出来了,称之为设计模式。......