虽然自认为自己对设计模式已经很了解了,但是从来没有系统的看过设计模式相关的书,最近在公司发现一本<java与模式>,正好系统的看一下,下面是这几天记的笔记.(并不是系统的讲解书中的内容)
一? 综述:
1、不要使用接口定义常量
2、自己少用标志接口
3、不要继承具体类
4、类层次的中间节点应该是接口或者抽象类,叶子是具体类
5、子类应当扩展父类的责任,而不是覆写父类的责任
6、面向接口编程
7、不要滥用继承,组合优先于继承
java中设计不当的类:calendar:作为接口,含有与具体的历法(罗马历法)相关的常量,不能扩展到中国的阴历历法(不符合开闭原则)
??????????????????? properies类:滥用继承,继承至hashtable,应当使用聚合
8、笛比特法则:只与自己的直接朋友通信,不与陌生人通信(1)狭义笛比特法则:只与朋友通讯,通过自己的朋友传递间接的调用(2)结合依赖倒转原则修改:不必通过朋友传递间接的调用,通过陌生人的抽象接口调用陌生人的行为(依旧不能与具体的陌生人发生通信)
9、尽量降低类中成员的访问权限,不要设计退化类(类似c中struct)。
??????? java中的point2D以及Dinmension2D类有这种设计缺陷(不过这种情况问题不大)
10、如果多个具体的产品类没有共同的商业逻辑,就可以把它们抽象到一个接口中,如果有共同的商业逻辑,就把共同的部分抽象到抽象类中,共同的部分尽量向类继承层次的上层移动,以达到复用的目的
二?? 工厂模式
1、简单工厂模式:参与角色:工厂/抽象产品类/具体产品类
?? 缺点:添加新产品的时候,虽然产品相关代码符合开闭原则,但对工厂类本身并不符合,需要修改其中的产生产品方法或者添加新的产生方法(工厂里实现的不同造成的修改不同)来支持新的产品类
?? 退化方式:省略掉工厂角色,抽象产品类担任具体产品类的工厂角色:提供静态的getInstance方法,比如java类库中的DateFormat类,(本人认为这样很不符合开闭原则,父类中出现与具体子类相关的代码,不方便扩展,添加新产品的时候,修改的时候缺点与原简单工厂的工厂角色类似)
2、工厂方法模式:参与角色:抽象工厂类/具体工厂类/抽象产品类/具体产品类
???? 消除了简单工厂的缺点
3、抽象工厂模式:简单工厂模式与工厂方法模式的结合
4、单例模式:饿汉和懒汉两种,前者将本身对象作为静态私有属性事先生成,后者推迟到调用的时候,后者需要考虑多线程的时候,前面需要加线程安全关键字(注意),java中还是前者为优。
?? 不要滥用单例,只有系统要求只有一个类的实例的时候才调用
?? 有的单例可能有状态属性,这就为多例模式提供了可能
?? 含有私有属性的类作成单例的时候尤其要注意:一是私有属性的线程安全,确实需要的时候可以加线程安全关键字,比如系统中的log类,二是确认这些属性是不是可以所有线程共享的,类似普通类的static
三?? 各种具体模式(1)
1、建造模式:参与角色4个:指导者、抽象建造对象、具体建造对象、产品
????? 一个复杂的产品有很多的零部件,就可以使用具体的建造对象来一一构造
2、原始模式:深拷贝、浅拷贝
3、适配器模式:将adaptee类适配成目标接口
4、合成模式:参与角色:composite接口、树枝节点类、树叶节点类
????? 分成透明式和安全式两种,各有优缺点
????? (1)前者将管理子对象的方法放到接口中,这样树型结构中的所有对象都是透明的,都可以统一调用,但是叶节点并没有管理子对象的能力,因此透明但不安全
????? (2)后者将管理子对象的方法下放到树枝节点类中,这样安全但不透明
5、装饰模式:继承已有类的接口,提供和已有类相同的方法,并对已有类的功能提供扩展(通过组合已有对象,调用已有对象方法的时候加入新的代码)
????? (1)透明的装饰模式(纯粹的装饰模式):装饰类、被装饰类继承于同一接口,而且装饰类只实现接口的方法,不提供额外方法的实现,调用该类的时候使用接口声明调用(实例化当然还是自己的构造函数),即该类的所有方法都是透明的
????? (2)半透明的装饰模式(退化的装饰模式):装饰类、被装饰类继承于同一接口,装饰类不仅实现接口的方法,还提供额外方法的实现,这样要调用它独特的方法的时候就必须使用它本身来调用,退化到一半装饰模式、一半适配器模式。
分享到:
相关推荐
最近这段时间正好是职业空档期,没什么事儿做,就把之前看过的设计模式翻出来整理了一 下,于是就有了上面几篇文章。整理设计模式的过程,也是一个深刻理解面向对象设计的过程。通过对各个模式的回顾,让我更能够...
CAD(计算机辅助设计)、CAM(计算机辅助制造)、CAPP(计算机辅助工艺规划)和CAE(计算机辅助工程分析)是一系列紧密相关的工程技术,它们在现代制造业中扮演着至关重要的角色。这些技术不仅极大地提高了设计和...
通过这次推进“MS—EEPO有效教育”语文课堂教学改革的初中实验学校活动,我深刻体会到教育模式创新对于提升教学质量的重要性。MS—EEPO(Multi-Style Effective Education for the Preparation of Our Future)是一...
技术面试是真正的技术考验,可能会涵盖设计模式、面向对象特性、数据结构实现、算法设计、JVM内存模型、新旧版本语言对比、垃圾回收机制、源代码分析、项目经历和问题解决能力等。面试官通过这些问题评估你的基础...
每个环节的设计都旨在引导学生逐步深入理解文章内容,并学会从中获取信息的方法。 **知识点9:教学反思** - **内容解析**:在教学结束后,教师需要进行反思,总结学生在学习过程中的表现和进步之处,同时也需要...
此外,通过讨论文章的结尾,学生们认识到小孩子敢于说真话的勇气,并从中受到启发,明白真实和勇敢的重要性。教师还引导学生进行想象活动,如设想不同情境下的对话,这有助于学生开拓思维,学习如何进行合理且富有...
总之,《我和祖父的园子》这堂课给我带来了深刻的启示,让我明白教师在教学过程中应注重培养学生的自主性和创新精神,同时,教师自身的专业成长和持续学习也是提升教学质量的关键。通过这样的教学实践,我们可以更好...
通过这次特殊的考试,全体学生都得到了一次深刻的道德教育,明白品德比分数更重要。 总的来说,这篇“一次别开生面的考试”作文揭示了教育的多元性,提醒我们要关注并培养学生的道德品质,同时也倡导一种更加全面的...
【主要内容】: 这篇文章是关于一位初中英语教师参加教学培训后的感想,重点讲述了新课程改革的理念和教学方法的转变。教师认识到,新课程改革强调学生在教学过程中的主体地位,不再仅仅是教师传授知识,而是注重学生...
对于学习者来说,这是一次难得的实践机会,可以通过阅读源码了解实际项目中的问题解决策略和设计模式。 总的来说,这套“VC++ 电子产品测试软件源码”涵盖了软件开发的多个核心领域,包括硬件交互、驱动开发、软件...
文章还提到了教育改革的指导思想,即要改变过于强调接受学习、死记硬背和机械训练的教学模式,倡导学生在愉快的教学活动中掌握知识,以积极主动、思维活跃的方式进行学习。文章提倡的教学方式包括让学生到台前演示,...
它必须摆脱传统工业机器人的设计模式,朝着更加轻量化、精密、灵巧的方向发展。优化设计技术不仅涉及到机器人结构本身的创新,还包括材料的选择、能效的优化、控制算法的改进等多方面。例如,在手术机器人的设计中,...
在这样的环境中实习,我有幸亲身体验到优秀教育机构的运作模式。实习期间,我不仅承担了课堂教学任务,还参与了班主任工作和其他一些辅助工作。 课堂教学是我实习的主要部分。面对初二(2)班的56位学生,我经历了...
大单元课型是一种创新的教学模式,旨在打破传统的单篇课文教学方式,将教学内容整合为更大的单元,以此来提升学生的学习效率和综合能力。这次培训中,我们有幸观摩了来自芒市小学的四位优秀教师和山东的两位专家的...
在本篇文章中,我们将深入探讨“Java游戏使命的召唤源码”,了解如何通过Java实现一款类似《使命的召唤》这样的游戏。 首先,我们要明白《使命的召唤》是一款射击类游戏,它涉及到多个关键的技术领域,如图形渲染、...
这时候,我逐渐明白这是一种威力强大的技术,因为这意味着不管我有什么样的有关要处理软件的问题,我都可以非常容易地找到答案,即使我没有看过任何相关的文献资料或者正在处理的程序的源代码。本书就是要为每一个对...