冲击50W年薪系列–设计模式(简单工厂模式)

冲击50W年薪系列–设计模式(简单工厂模式)GirlFriend girlFriend = new GirlFriend();常见的工厂模式jdk比较常见public fin

大家好,欢迎来到IT知识分享网。

学习的脚步不能停。。。


前言

上一篇介绍了设计模式的定义、好处、原则、分类等,从本篇开始进行逐个分解,但是怎样写能让大家更容易吸收,不觉得乏味,绞尽脑汁,脑汁绞尽,灵机一动,想到了屌丝男士,来一个我的世间之码农的世界,可以YY起来了。

1024诞生

天地弥留之际,一道五色光一闪而过,一位集俊朗、智慧、勇气、善良、单纯于一体的少年“1024”站立在茫茫大地之上,他无所不能,他万丈光芒。哦,他已经开始了神奇的旅程。

冲击50W年薪系列--设计模式(简单工厂模式)

图片来源于网络

new一个对象

1024成为了世界的创造者,时时刻刻都在为美丽的世界辛勤的创造着,看着广阔的天空,感叹到如果能有女朋友陪伴多好,于是无所不能的他开始创造。。。

public class GirlFriend {
    void say(){
        System.out.println("你好, 1024!");
    }
}

public class TheCodersWorld {
    public static void main(String[] args) {
        GirlFriend girlFriend = new GirlFriend();
        girlFriend.say();
    }
}

这里比较简单,相信大家很容易看懂,不赘述了。

无所不能的1024很快就new 出来了一个对象,并且亲切的跟他打招呼,1024开心的不得了,口中喃喃自语“我的世界我做主”,要不再来一个,哦不,来一个韩国的女朋友吧,又是一番创造。。。

@Data
public abstract class GirlFriend {
    abstract void say();
}

public class ChinaGirlFriend extends GirlFriend {
    @Override
    void say() {
        System.out.println("你好, 1024!");
    }
}

public class KoreaGirlFriend extends GirlFriend {
    @Override
    void say() {
        System.out.println("안녕하세요, 1024!");
    }
}

public class TheCodersWorld {
    // 我是1024 我无所不能 我的世界我做主
    public static void main(String[] args) {
        // 中国女朋友
        GirlFriend girlFriend = new ChinaGirlFriend();
        girlFriend.say();
        // 韩国女朋友
        GirlFriend girlFriend2 = new KoreaGirlFriend();
        girlFriend2.say();
    }
}

以上抽象GirlFriend类,分别添加ChinaGirlFriend和KoreaGirlFriend实现类,在TheCodersWorld中分别new 出对象。这一步应该也不难。

无所不能的1024很快又创造了一个女朋友,这时候1024发现,我要做的事情那么多,创建女朋友的工作应该由独立的机构来做,需要了就让机构送来就行。那么简单工厂应运而生,1024又是一番创造。。。

@AllArgsConstructor
public enum GirlFriendNationality {
    CHINA(1,"中国"),
    KOREA(2,"韩国");
    int code;
    String message;
}

public class GirlFriendFactory {
    public static GirlFriend create(GirlFriendNationality nationality){
        GirlFriend girlFriend;
        switch (nationality){
            case KOREA:
                girlFriend = new KoreaGirlFriend();
                break;
            default:
                girlFriend = new ChinaGirlFriend();
        }
        return girlFriend;
    }
}

public class TheCodersWorld {
    // 我是1024 我无所不能 我的世界我做主
    public static void main(String[] args) {
        // 中国女朋友
        GirlFriend girlFriend = GirlFriendFactory.create(GirlFriendNationality.CHINA);
        girlFriend.say();
        // 韩国女朋友
        GirlFriend girlFriend2 = GirlFriendFactory.create(GirlFriendNationality.KOREA);
        girlFriend2.say();
    }
}

这里定义的GirlFriendFactory就是我们的简单工厂(也叫静态工厂),专门生产定义好的商品,调用者不需要关心内部如何实现,只能调用create方法拿到需要的对象即可。

现在无所不能的1024终于开心了,什么时候我需要女朋友了,只要把国籍告诉GirlFriendFactory这个机构即可,机构立刻送来就行。1024可以构思其他的创造了。

简单工厂模式

经过上面一系列的演变,我们大概知道如何使用简单工厂,那么下面回归到定义开始,进一步认识简单工厂模式。

冲击50W年薪系列--设计模式(简单工厂模式)

  • 定义
    • 简单工厂模式属于创建型模式又叫做静态工厂方法模式。在简单工厂模式中,一般根据参数的不同返回不同类的实例。
      简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。
  • 优点
    • 责任的分割,负责生产,调用方负责消费
    • 消费方使用简单,不关心内部由多复杂,比如类名长分不清,另外结合配置,消费方可以很快的扩展。
  • 缺点
    • 系统扩展困难,添加新产品就得修改工厂逻辑,破坏了“开闭原则”;在产品类型较多时,有可能造成工厂逻辑过于复杂,不利于系统的扩展和维护

应用场景

以上的例子就是一个应用场景,我将在下一篇工厂模式里面跟简单工厂进行比较说明。

常见的工厂模式

  • jdk比较常见
public final static DateFormat getDateInstance(); 
public final static DateFormat getDateInstance(int style); 
public final static DateFormat getDateInstance(int style,Locale locale);
  • 加密类,日志类等


突发奇想以这种方式来讲述,欢迎大家指正拍砖,希望能帮助大家记忆个理解,很好的利用碎片化的时间,请大家留下宝贵的意见。也可以YY一下1024下面的创造,提供构思大家一起成长。


做一个靠谱的程序员,与君共勉。

用于积累,用于分享。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/65552.html

(0)

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信