java 程序设计思想,java程序设计思想

《java程序设计思想》由会员分享,可在线阅读,更多相关《java程序设计思想(8页珍藏版)》请在人人文库网上搜索。

1、设计模式一模板方法模式一、概念愎板方法模式类图模板方法模式在一个方法中定义算法骨架,而将一些步骤延迟到子类。模板方法使得子类 在不改变算法骨架的前提下,重新定义算法中的某些步骤。模扳方法在实现算法过程中* 用到了这两个操作Q模板方法 本身和这两个礫作的具体实现 之间被解耦了八Cone reteClassfiCld isL J具体类实现了抽象的棧 作.当模板方法需要这 两个抽彖方法时,就会 调目它们U二、要点1. 模板方法中的非final方法(默认实现或不做事的方法)称为 钩子”2. 钩子可以在子类的实现。3. 钩子可以让子类能够有机会对模板方法中某些即将发生的(或刚刚发生的)步骤做出反应4. 。

2、工厂模式为模板方法模式的特例。5. 除了可以灵活应对子步骤的变化外,不用调用我,让我来调用你”的反向控制结构是Template Method 的典型应用。6. 模板方法是代码复用的一项基本的技术,在类库中尤其重要。它遵循抽象类应当拥有尽可能多的行为,应当拥有尽可能少的数据”的重构原则。三、适用性1. 一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。2. 各子类中公共的行为应被提取出来并集中到一个公共父类中以避免代码重复。这是Opdyke和Johnson所描述过的重分解以一般化”的一个很好的例子。首先识别现有代码中的不同之处,并且将不同之处分离为新的操作。最后,用一个调用这些新的操。

3、作的模板方法来替换这些不同的代码。3. 控制子类扩展。模板方法只在特定点调用Hook操作,这样就只允许在这些点进行扩展。设计模式一单例模式亠、概念单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供全局访问点。类称为单例类。这个SinoletonOstatic b niqu einstance其生数据staticstanceQuniquLnstance丿縈蠶豔_类图QeUnstanceO方淙是静态的, 可以在代码的任何地方电 S ineleton. gethi stance()方 r访问它这和全局变蔓一惮豊呈一三去一一苣件可以延迟实洌化。二、要点单例模式的要点有三个;1. 一是某个。

4、类只能有一个实例;2. 二是它必须自行创建这个实例;3. 三是它必须自行向整个系统提供这个实例。实现单例模式的思路是:1. 一个类能返回对象一个引用(永远是同一个)和一个获得该实例的方法(必须是静态方法,通 常使用get In sta nee这个名称);2. 当我们调用这个方法时,如果类持有的引用不为空就返回这个引用,如果类保持的引用为空就创建该类的实例并将实例的引用赋予该类保持的引用;3. 同时我们还将该类的构造函数定义为私有方法,这样其他处的代码就无法通过调用该类的构造函数来实例化该类的对象,只有通过该类提供的静态方法来得到该类的唯一实例。单例模式在多线程的应用场合下必须小心使用。如果当唯。

5、一实例尚未创建时,有两个线程同时调用创建方法,那么它们同时没有检测到唯一实例的存在,从而同时各自创建了一个实例,这样就有两个实例被构造出来,从而违反了单例模式中实例唯一的原则。解决这个问题的办法是为指示类是否已经实例化的变量提供一个互斥锁(虽然这样会降低效率)。一般构建方式有两种:*懒汉方式:指全局的单例实例在第一次被使用时构建。饿汉方式:指全局的单例实例在类装载时构建。、场景当一个类的实例可以有且只可以一个的时候就需要用到了。为什么只需要有一个呢?有人说是为了节约内存。本人对这个说法持保留态度。只有一个实例确实减少内存占用,可是我认为这不是使用 单例模式的理由。我认为使用 单例模式的时机是当。

6、实例存在多个会引起程序逻 辑错误的时候。四、优缺点优点:*实例控制:Sin glet on会阻止其他对象实例化其自己的Sin glet on对象的副本,从而确保所有对象都访问唯一实例灵活性:因为类控制了实例化过程,所以类可以更加灵活修改实例化过程缺点:开销:虽然数量很少,但如果每次对象请求引用时都要检查是否存在类的实例,将 仍然需要一些开销。可以通过使用静态初始化解决此问题,上面的五种实现方式中 已经说过了。可能的开发混淆:使用sin gleton对象(尤其在类库中定义的对象)时,开发人员必须记住自己不能使用new关键字实例化对象。因为可能无法访问库源代码,因此应用程序开发人员可能会意外发现自。

7、己无法直接实例化此类。*对象的生存期:Sin gleton不能解决删除单个对象的问题。在提供内存管理的语言中(例如基于.NET Framework 的语言),只有Singleton类能够导致实例被取消分 配,因为它包含对该实例的私有引用。在某些语言中(如C+),其他类可以删除对象实例,但这样会导致Sin glet on类中出现悬浮引用。五、经典代码public class Singletonprotected volatile static Si ngleto n unq iue In sta nee;protected Sin gleto n()public static Sin glet 。

8、on getl nsta nce()if (NULL = unqiueInstance)synchronized (Singleton.class )if (NULL = unqiueInstanee) uniquein sta nee =n ewS in glet on();return unqiueinstanee;匕|设计模式一装饰者模式一、概念Decorator模式(别名 Wrapper ):动态将职责附加到对象上,若要扩展功能,装饰者提供 了比继承更具弹性的代替方案。装饰者模式类图看破装饰者邑装起来便用nC otnponentConcnet&Comporient 屋膿丈态注新 行为的。

9、討象.它护 孕 Caioneui.=CartpAlMJaxethodLA) nL*odBj:)每一个装托尋HAS-A 邑装一个)望件,生 装饰事有一个该组件 的引用.Co ucrneC BMLpobeiMEth&dAOConcreieDccoTatoT 有一个包装的组件 的別阳.C one retelkc airir&rAConereteDefora 衿 ifiCraft縈怕匕t切罚! AC嘲CompeffiiLt rapptcSOtjObjHt徑朋恬2hUbiIAO更它方总gttxiAQ盘亡云:*茬光者能扩曼 fongpawni 的 雄=二、设计原则多用组合,少用继承。*类应设计的对扩展开放。

10、,对修改关闭。利用继承设计子类的行为,是在编译时静态决定的,而且所有的子类都会继承到相同的行为。 然而,如果能够利用组合的做法扩展对象的行为,就可以在运行时动态地进行扩展。二、要点:1. 装饰者和被装饰对象有相同的超类型。2. 可以用一个或多个装饰者包装一个对象。3. 装饰者可以在所委托被装饰者的行为之前或之后,加上自己的行为,以达到特定的目的。4. 对象可以在任何时候被装饰, 所以可以在运行时动态的, 不限量的用你喜欢的装饰者来装饰 对象。5. 装饰模式中使用继承的关键是想达到装饰者和被装饰对象的类型匹配,而不是获得其行为。四、场景1. 需要扩展一个类的功能,或给一个类添加附加职责。2. 需。

11、要动态的给一个对象添加功能,这些功能可以再动态的撤销。3. 需要增加由一些基本功能的排列组合而产生的非常大量的功能, 从而使继承关系变的不现实。4. 当不能采用生成子类的方法进行扩充时。 一种情况是, 可能有大量独立的扩展, 为支持每一 种组合将产生大量的子类, 使得子类数目呈爆炸性增长。 另一种情况可能是因为类定义被隐 藏,或类定义不能用于生成子类。五、优缺点优点:1. Decorator 模式与继承关系的目的都是要扩展对象的功能,但是 Decorator 可以提供比继承 更多的灵活性。2. 通过使用不同的具体装饰类以及这些装饰类的排列组合, 设计师可以创造出很多不同行为的 组合。缺点:1. 这种比继承更加灵活机动的特性,也同时意味着更加多的复杂性。2. 装饰模式会导致设计中出现许多小类,如果过度使用,会使程序变得很复杂。3. 装饰模式是针对抽象组件 (Component )类型编程。 但是, 如果你要针对具体组件编程时, 就应该重新思考你的应用架构,以及装饰者是否合适。当然也可以改变 Component 接口, 增加新的公开的行为,实现 “半透明 ”的装饰者模式。在实际项目中要做出最佳选择。六、Java IO 类库中的应用Java I/O装饰类。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值