大道至简:让你顿悟创建型设计模式
佛教中有一种修行方法叫做“顿悟”,简单的说突然间想明白了。我不是佛教弟子,但幸运的是这两天重温设计模式的时候,也顿悟了一把:每个创建型模式一句话总结!
既然是顿悟,我就不详细介绍了,设计模式相关的书上都会有详细的介绍,我只把我顿悟的内容共享出来,看看你是否可以顿悟:)?
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:创建一个全局对象
最后这个模式是最简单的了,相信不用顿悟你也能够明白:)