大家好,欢迎来到IT知识分享网。
学习的脚步不能停。。。
前言
上一篇介绍了设计模式的定义、好处、原则、分类等,从本篇开始进行逐个分解,但是怎样写能让大家更容易吸收,不觉得乏味,绞尽脑汁,脑汁绞尽,灵机一动,想到了屌丝男士,来一个我的世间之码农的世界,可以YY起来了。
1024诞生
天地弥留之际,一道五色光一闪而过,一位集俊朗、智慧、勇气、善良、单纯于一体的少年“1024”站立在茫茫大地之上,他无所不能,他万丈光芒。哦,他已经开始了神奇的旅程。
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可以构思其他的创造了。
简单工厂模式
经过上面一系列的演变,我们大概知道如何使用简单工厂,那么下面回归到定义开始,进一步认识简单工厂模式。
- 定义
- 简单工厂模式属于创建型模式又叫做静态工厂方法模式。在简单工厂模式中,一般根据参数的不同返回不同类的实例。
简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。 - 优点
- 责任的分割,负责生产,调用方负责消费
- 消费方使用简单,不关心内部由多复杂,比如类名长分不清,另外结合配置,消费方可以很快的扩展。
- 缺点
- 系统扩展困难,添加新产品就得修改工厂逻辑,破坏了“开闭原则”;在产品类型较多时,有可能造成工厂逻辑过于复杂,不利于系统的扩展和维护。
应用场景
以上的例子就是一个应用场景,我将在下一篇工厂模式里面跟简单工厂进行比较说明。
常见的工厂模式
- 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