大道至简:让你顿悟创建型设计模式

本文以顿悟的形式总结了创建型设计模式的精髓:AbstractFactory用于创建一组相关对象;Builder用于创建复杂对象;FactoryMethod用于创建参数化对象;Prototype提供灵活的组合对象创建方式;Singleton确保单一实例的全局访问。

大道至简:让你顿悟创建型设计模式

佛教中有一种修行方法叫做“顿悟”,简单的说突然间想明白了。我不是佛教弟子,但幸运的是这两天重温设计模式的时候,也顿悟了一把:每个创建型模式一句话总结!

既然是顿悟,我就不详细介绍了,设计模式相关的书上都会有详细的介绍,我只把我顿悟的内容共享出来,看看你是否可以顿悟:)?

Abstract Factory:创建一组相关对象

什么叫做“相关对象”,当然就是一组有关系的对象了。

逻辑上的解释还是很难以理解,但是举个简单的例子相信大家就都明白了:手机主题。

手机主题大家肯定都玩过,比如说“变形金刚”主题、“阿凡达”主题、“浪漫XXX”主题等等,你改变了主题后,你的“桌面、屏保、来电铃音、短信铃音、色彩、按钮。。。。。。”等都会跟着一起改变,这里就是一个典型的Abstract Factory设计模式:“主题”是Abstract Factory,“桌面、屏保、来电铃音、短信铃音、色彩、按钮。。。。。。”就是相关对象,它们之间的关系就是“具有相似的风格”。

Builder:创建一个复杂对象

什么叫“复杂对象”,地球人都知道,我就不啰嗦了。

但实际应用中怎么判断呢?我有一个很简单的方法:只包含原生数据(即int/String/float)属性的对象是简单对象,包含其它对象的是复杂对象,数量越多越复杂。

举例来说:一间房子包含门、窗、地板、天花板、家具等等,“房子”就是一个复杂对象,“门、窗、地板、天花板、家具”相对来说就是简单对象。之所以加上“相对来说”来修饰,是因为“门、窗、地板、天花板、家具”本身也可以是复杂对象,这个需要根据实际项目需要来判断。

Factory Method:创建一个参数化对象

什么叫“参数化对象”,相信大家都遇到过,简单的说就是根据参数来创建对象。

举个实例就很明白了:

Class AnimalFactory{

Animal createAnimal(String animalType) {

if( animalType.equals(“”) ){

return new Pig();

}

if( animalType.equals(“”) ){

return new Dog();

}

if( animalType.equals(“”) ){

return new Person();

}

if( animalType.equals(“公牛”) ){

return new Bull();

}

}

Prototype:创建一个组合对象

什么叫“组合对象”,有了前面三个创建型模式,为什么还要这个模式呢?

主要的原因就是前面三个模式都是固定的,一旦写完,能够创建的对象就固定了,一般情况下没有问题,但如果要进行灵活的排列组合的话,那么就需要创建非常多的各种子类。

还是以“手机主题”来说吧,如果你的手机上有10个桌面、10个屏保、10个来电铃音、10个短信铃音、10个色彩、10种风格的按钮。。。。。。”那么排列组合下来可以有多少种“主题”呢?100万个主题,你的手机上有这么多主题么?

而通过Prototype,你就可以任意定制主题了,不用创建那么多的主题。

所以,Prototype与前面三个模式相比的特点就是“灵活”。

Singleton:创建一个全局对象

最后这个模式是最简单的了,相信不用顿悟你也能够明白:)

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值