面试官:设计模式之简单工厂模式

39 阅读5分钟

真正的大师永远怀着一颗学徒的心
把一生一分为二、前半生不犹豫、后半生不后悔
文章持续更新,可以微信搜索【小奇JAVA面试】第一时间阅读,回复【资料】更有我为大家准备的福利哟!回复【项目】有我为大家准备的一些项目源码。回复【简历模板】有我为大家准备的简历模板。

在这里插入图片描述

前言

经过长达半年的求职生涯,你们的奇哥终于顶不住了,半年没有收入来源被迫只能先去电子厂上班过渡了,有人问我明明可以靠脸吃饭,为什么非要靠才华,我想这可能就是奇哥天生傲骨吧。

在这里插入图片描述

推开工厂的大门,映入眼帘的是一排排破旧的缝纫机,我跟主管说咱们不是电子厂吗,电子在哪里?主管指了指墙上的电子表,说有电子表的工厂就是电子厂(我淦)。。。。

我又打开了手机上的四七某城,看了看招聘简介的图片,完全就是天壤之别啊,现在打工也必须得用照骗才能骗过来人吗?招聘简介图片如下(吸溜~~)

在这里插入图片描述

算了算了,既来之则干之,先去宿舍挑个好地方,去晚了别说床了,地铺都打不到地方。

在这里插入图片描述
幸亏来的早,宿舍还没有人来,先占领一个靠窗的挨着暖气的位置,挨着暖气冬天可以把洗完的袜子搭上去充当加湿器(噗。。。)

开班第一天小伙伴们都干的热火朝天,我踩着缝纫机踏板犹如踩着风火轮般顺滑,就在我跟隔壁小美抛媚眼之际我的手机响了。

我:“喂,谁呀!”

面试官:“你好,是奇先生吗,我们是XXX公司的,我们看到了你的简历,现在方便面试吗?”

我:“方便,你面试吧!”

面试官:“好的,那你先说一说你对简单工厂模式的理解吧。”

我:“嗯。。。简单工厂啊,他这个简单工厂其实就是。。。嗯。”(这时老板听见我说简单工厂,立马走过来狡辩)

老板:“我们可不是简单工厂啊,我们的工厂很壮观,很复杂,别听小奇给你瞎说。”

我:(我特么的。。。有你什么事)

一、面试

面试官:你可以说一下简单工厂模式的定义吗?

我:简单工厂模式就是定义一个工厂类,它可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类。

面试官:你能想一个现实生活中的场景来描述一下吗?

我:假设我开了一个果园,叫“真甜呀果园”,我这个果园就可以看成一个工厂(Factory),而从我这个果园产生的水果就被称为产品(Product),假设你来我的果园买水果,你只需要把你想买的水果告诉我,例如苹果,在这里苹果代表一个参数,你告诉我你需要苹果,我就给你生产出来一箱苹果。你并不需要知道苹果是怎么生产出来的,你不需要知道我们苹果是从树上摘的还是地里捡的,你只需要知道一箱50元即可。

面试官:简单工厂模式都有哪些核心角色

我:简单工厂模式有3个角色。

1、Factory(工厂角色):工厂角色就是“真甜呀果园”,负责实现创建所有产品实例的内部逻辑;工厂类可以被外界直接调用,也就是用户可以直接给厂子打电话说你需要什么水果,然后我们就给你生产,在工厂类中提供了静态的工厂方法factoryMethod(),它返回类型为抽象产品类型Product,例如我们这里产品类型就是箱,什么水果最高都是包装成箱(产品)。

2、Product(抽象产品角色):它是工厂类创建的所有对象的父类,说白了就是水果箱,所有的水果都需要装到箱子里。

3、ConcreteProduct(具体产品角色):它是简单工厂模式的创建目标,也就是最后的水果,例如苹果,香蕉等。每一个具体的产品角色都继承了抽象产品角色,也就是每一个水果都装到箱子里了。

面试官:你能给我简单写一个简单工厂模式吗

1、首先需要一个定制一批水果箱

public abstract class Product {
    //所有水果类的公共特点
    public void common(){
        System.out.println("我们都是水果,我们都能榨汁");
    }

    //声明抽象业务方法
    public abstract void methodDiff();
}

2、然后需要一些真实的水果放入水果箱里

public class Apple extends Product{
    @Override
    public void methodDiff() {
        System.out.println("我是苹果,我5元一斤");
    }
}

3、然后需要创建一个工厂来销售这些水果

public class Factory {
    //静态工厂方法
    public static Product getProduct(String name){
        Product product = null;
        if(name.equals("苹果")){
            product = new Apple();
        }
        return product;
    }
}

4、最后客户给工厂打电话,说我需要苹果

public class Client {
    public static void main(String[] args) {
        Product product;
        product = Factory.getProduct("苹果"); //给工厂打电话要一箱苹果
        product.common();   //苹果到家了,我输出一下苹果的好坏
        product.methodDiff(); //苹果到家了,我输出一下苹果的好坏
    }
}

在这里插入图片描述

二、总结

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

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

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