`

看别人关于设计模式的文章很深刻,不是很明白

阅读更多
虽然自认为自己对设计模式已经很了解了,但是从来没有系统的看过设计模式相关的书,最近在公司发现一本<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)半透明的装饰模式(退化的装饰模式):装饰类、被装饰类继承于同一接口,装饰类不仅实现接口的方法,还提供额外方法的实现,这样要调用它独特的方法的时候就必须使用它本身来调用,退化到一半装饰模式、一半适配器模式。

分享到:
评论
2 楼 beyondsanli 2007-04-13  
懒汉就是
private static Singleton singleton=null;

public static Singleton getInstance()
{
if(singleton==null)
singleton=new Singleton();
return singleton;
}
1 楼 beyondsanli 2007-04-13  
4、单例模式:饿汉和懒汉两种,前者将本身对象作为静态私有属性事先生成,后者推迟到调用的时候,后者需要考虑多线程的时候,前面需要加线程安全关键字(注意),java中还是前者为优。
public class Singleton
{
//private static Singleton singleton=null;
用这个方式定义,然后在getInstance()中定义获取对象,说严格说不是singleton怎么理解呢,是不是不是类对象了呢!对象的产生的时间不对呢!
private static Singleton singleton=new Singleton();
private Singleton()
{
System.out.println("has been a object.");
}
public static Singleton getInstance()
{
return singleton;
}
}
public class Main
{
public static void main(String[] args)
{
System.out.println("start");
Singleton obj1=Singleton.getInstance();
Singleton obj2=Singleton.getInstance();
if(obj1==obj2)
{
System.out.println("obj1 and obj2 are same object");
}
else
{
System.out.println("obj1 and obj2 are not one object instance");
}
System.out.println("End")
}
}

相关推荐

    设计模式之总结与回顾

    最近这段时间正好是职业空档期,没什么事儿做,就把之前看过的设计模式翻出来整理了一 下,于是就有了上面几篇文章。整理设计模式的过程,也是一个深刻理解面向对象设计的过程。通过对各个模式的回顾,让我更能够...

    “CAD_CAM_CAPP_CAE课程综合训练”教学探索.pdf

    CAD(计算机辅助设计)、CAM(计算机辅助制造)、CAPP(计算机辅助工艺规划)和CAE(计算机辅助工程分析)是一系列紧密相关的工程技术,它们在现代制造业中扮演着至关重要的角色。这些技术不仅极大地提高了设计和...

    心得体会关于推进“MS—EEPO有效教育”语文课堂教学改革初中实验学校活动的心得体会.doc

    通过这次推进“MS—EEPO有效教育”语文课堂教学改革的初中实验学校活动,我深刻体会到教育模式创新对于提升教学质量的重要性。MS—EEPO(Multi-Style Effective Education for the Preparation of Our Future)是一...

    程序员必须掌握的面试技巧.pdf,这是一份不错的文件

    技术面试是真正的技术考验,可能会涵盖设计模式、面向对象特性、数据结构实现、算法设计、JVM内存模型、新旧版本语言对比、垃圾回收机制、源代码分析、项目经历和问题解决能力等。面试官通过这些问题评估你的基础...

    秋六年级语文上册 第七单元 25 养成读报的好习惯教案设计 苏教版-苏教版小学六年级上册语文教案.docx

    每个环节的设计都旨在引导学生逐步深入理解文章内容,并学会从中获取信息的方法。 **知识点9:教学反思** - **内容解析**:在教学结束后,教师需要进行反思,总结学生在学习过程中的表现和进步之处,同时也需要...

    《皇帝的新装》教学案例新设计.doc

    此外,通过讨论文章的结尾,学生们认识到小孩子敢于说真话的勇气,并从中受到启发,明白真实和勇敢的重要性。教师还引导学生进行想象活动,如设想不同情境下的对话,这有助于学生开拓思维,学习如何进行合理且富有...

    《我和祖父的园子》听课体会.docx

    总之,《我和祖父的园子》这堂课给我带来了深刻的启示,让我明白教师在教学过程中应注重培养学生的自主性和创新精神,同时,教师自身的专业成长和持续学习也是提升教学质量的关键。通过这样的教学实践,我们可以更好...

    一次别开生面的考试作文.doc

    通过这次特殊的考试,全体学生都得到了一次深刻的道德教育,明白品德比分数更重要。 总的来说,这篇“一次别开生面的考试”作文揭示了教育的多元性,提醒我们要关注并培养学生的道德品质,同时也倡导一种更加全面的...

    初中英语教师培训心得体会.doc

    【主要内容】: 这篇文章是关于一位初中英语教师参加教学培训后的感想,重点讲述了新课程改革的理念和教学方法的转变。教师认识到,新课程改革强调学生在教学过程中的主体地位,不再仅仅是教师传授知识,而是注重学生...

    VC++ 电子产品测试软件源码

    对于学习者来说,这是一次难得的实践机会,可以通过阅读源码了解实际项目中的问题解决策略和设计模式。 总的来说,这套“VC++ 电子产品测试软件源码”涵盖了软件开发的多个核心领域,包括硬件交互、驱动开发、软件...

    培养学生学习数学兴趣之我见 (2010年)

    文章还提到了教育改革的指导思想,即要改变过于强调接受学习、死记硬背和机械训练的教学模式,倡导学生在愉快的教学活动中掌握知识,以积极主动、思维活跃的方式进行学习。文章提倡的教学方式包括让学生到台前演示,...

    解析医疗机器人行业七大关键技术

    它必须摆脱传统工业机器人的设计模式,朝着更加轻量化、精密、灵巧的方向发展。优化设计技术不仅涉及到机器人结构本身的创新,还包括材料的选择、能效的优化、控制算法的改进等多方面。例如,在手术机器人的设计中,...

    有关毕业实习总结三篇.doc

    在这样的环境中实习,我有幸亲身体验到优秀教育机构的运作模式。实习期间,我不仅承担了课堂教学任务,还参与了班主任工作和其他一些辅助工作。 课堂教学是我实习的主要部分。面对初二(2)班的56位学生,我经历了...

    “大单元课型”培训学习心得.docx

    大单元课型是一种创新的教学模式,旨在打破传统的单篇课文教学方式,将教学内容整合为更大的单元,以此来提升学生的学习效率和综合能力。这次培训中,我们有幸观摩了来自芒市小学的四位优秀教师和山东的两位专家的...

    Java游戏使命的召唤源码.7z

    在本篇文章中,我们将深入探讨“Java游戏使命的召唤源码”,了解如何通过Java实现一款类似《使命的召唤》这样的游戏。 首先,我们要明白《使命的召唤》是一款射击类游戏,它涉及到多个关键的技术领域,如图形渲染、...

    Reversing:逆向工程揭密

    这时候,我逐渐明白这是一种威力强大的技术,因为这意味着不管我有什么样的有关要处理软件的问题,我都可以非常容易地找到答案,即使我没有看过任何相关的文献资料或者正在处理的程序的源代码。本书就是要为每一个对...

Global site tag (gtag.js) - Google Analytics