视频中老师说:工厂类返回的不是具体的实现类,而是返回的接口。

视频中老师说:工厂类返回的不是具体的实现类,而是返回的接口。

package com.imooc.factory.i18n;
public class I18NFactory {
    //静态工厂
    public static I18N getI18NObject(String area){
        if(area.equals("china")){
            return new Chinese();
        }else if(area.equals("spain")){
            return new Spainish();
        }else if(area.equals("Britain")||area.equals("US")){
            return new English();
        }else{
            return null;
        }
    }
}

在这个i18n案例中,返回的不是具体的new 对象(如new Chinese() )吗?,也是一个实现了I18N接口的对象实例,怎么理解老师所说的 工厂类返回的不是具体的实现类,而是返回的某一个接口 这句话呢?

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学你好,工厂模式隐藏了创建类的细节,客户端使用者直接面向工厂编程,让工厂自动创建选择所适合的对象。对于用户来说无需关注工厂类具体创建了哪个实现类,只需要知道工厂类返回了某一个接口就可以了。

工厂类返回的是接口i18n类型的实例,而不是某一个具体实现类类型Chinese、Spainish、English的实例,代码如下图所示。所以说“工厂类返回的不是具体的实现类,而是返回的接口”。

https://img1.sycdn.imooc.com//climg/6215de2f09cfd54805910104.jpg

祝学习愉快~

  • 晓舟 提问者 #1

        return new Chinese();这里如何理解呢?这不是初始化了一个实例并返回了吗?

    2022-02-23 15:30:49
  • 好帮手慕小小 回复 提问者 晓舟 #2

    同学你好,是的new Chinese()表示的是创建了实现类的实例并返回,但工厂方法实际返回的数据是接口类型的引用,其指向的实际对象是某一个具体的实现类。

    例如:i18n instance1 = new Chinese();而不是直接创建实现类型实例Chinese insrance = new Chinese()

    祝学习愉快~

    2022-02-23 15:45:23
  • 晓舟 提问者 #3

    为什么 红色框内的文字不能改成 I18NFactory i18n 呢

    2022-02-23 19:57:30
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师