Java - 复合模式优于继承】的更多相关文章

继承是实现代码重用的方法之一,但使用不当则会导致诸多问题. 继承会破坏封装性,对一个具体类进行跨包访问级别的继承很危险. 即,子类依赖父类的实现细节. 如果父类的实现细节发生变化,子类则可能遭到破坏. 举个例子,扩展HashSet,记录HashSet实例创建以来一共进行了多少次添加元素的操作. HashSet有两个添加元素的方法——add(E e)和addAll(Collection<? extends E> c). 那就覆盖这两个方法,在添加操作执行前记录次数: public class I…
复合优于继承 继承打破了封装性(子类依赖父类中特定功能的实现细节) 合理的使用继承的情况: 在包内使用 父类专门为继承为设计,并且有很好的文档说明,存在is-a关系 只有当子类真正是父类的子类型时,才适合用继承. 对于两个类A和B,只有两者之间存在"is-a"关系,类B才能拓展类A. 继承机制会把父类API中的所有缺陷传播到子类中,而复合允许设计新的API来隐藏这些缺陷. 复合(composition):不扩展现有的类,而是在新的类中增加一个私有域,引用现有类的一个实例. 转发(fow…
Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将近8年的时间,但随着Java 6,7,8,甚至9的发布,Java语言发生了深刻的变化. 在这里第一时间翻译成中文版.供大家学习分享之用. 18. 组合优于继承 继承是实现代码重用的有效方式,但并不总是最好的工具.使用不当,会导致脆弱的软件. 在包中使用继承是安全的,其中子类和父类的实现都在同一个程序员的控制之…
装饰者模式目标 把许多要实现的功能,加载在子类上,类的继承,显得很臃肿,装饰着模式是在不改变原有类文件和使用继承的情况下,通过创建一个包装对象动态地扩展一个对象的功能,相比生成子类更为灵活 装饰者模式角色 抽象组件角色 给出一个抽象接口 具体组件角色 定义一个将要增加附加功能的类,相当于父类 抽象装饰者角色 持有一个组件对象的实例,并且实现抽象组件接口 具体装饰者角色 负责给组件对象添加附加的功能,相当于子类 装饰者模式示例 以一件商品被卖出为例 //抽象组件角色 Commodity.java…
一.什么是复合模式? 在形式上,复合模式确实是多个模式的组合,但满足了这一条并不一定是复合模式,注意它的定义: 将多个模式结合起来形成一个“框架”,以解决一般性问题 一提到“框架”,可能最容易联想到的就是MVC吧,不过MVC确实是一个经典的复合模式 二.MVC与复合模式 Model,View,Controller各自的职责: 这里不得不强调一下控制逻辑与应用逻辑(算法逻辑)的区别: 所谓控制逻辑,就是判断在当前情景下应该调用什么对象的什么方法 而应用逻辑指的是具体对象的具体方法的内部实现(某个复…
复合模式:复合模式结合两个或以上的模式,组成一个解决方案,解决一再发生的一般性问题 要点: 1.MVC是复合模式,结合了观察者模式.策略模式和组合模式 2.模型使用观察者模式,以便观察者更新,同时保持两者之间的解耦 3.控制器是视图的策略,视图可以使用不同的控制器实现,得到不同的行为 4.视图使用组合模式实现用户界面,用户界面通常组合了嵌套的组件,像面板.框架和按钮 5.这些模式携手合作,把MVC模型的三层解耦,这样可以保持设计干净又有弹性 6.适配器模式用来将心得模型适配成已有的视图的控制器…
一.前言                                                                                       几个月前的看书笔记,内容全部都是摘自书中比较精辟的句子.笔记都是一段一段的句子,故没有文章的篇幅概念,仅供温习之用,更多详细内容请看原书!!! <代码整洁之道>里面有很多前人编写简洁.漂亮代码的经验.当然书中作者的经验并不100%适合每个人,但大部分都是可借鉴的! <java与模式>这本书内容太多了,我…
>设计目标:可扩展性,灵活性,可插入性. >设计原则 ● Open Closed Principle 开闭原则 对扩展开放,对修改关闭. 对面向对象的语言来说,不可以更改的是系统的抽象层,而可以扩展的是系统的实现层. ●里式代换原则 任何基类可以出现的地方,子类一定可以出现. ●依赖倒转原则 要依赖于抽象,不要依赖于实现. ●合成/组合原则 尽量使用复合而不是继承 ●迪米特法则 一个软件的实体应该减少与其他实体发生相互作用. ●接口隔离原则 应该提供小的单独接口. >抽象类 ●抽象类应该…
设计模式学习--复合模式(Compound Pattern) 概述 ——————————————————————————————————————————————————— 2013年8月4日<Head First设计模式学习> 今天来介绍这本书最后一个模式——复合模式,当然设计模式可不仅仅只有那么多,经过前辈们演变出来的模式可是很多的,我所介绍的只是比较通用的模式,可以说是一种规范吧,我想在实际的工作中,简单的一种模式是不能满足项目千奇百怪的需求的,那就可能需要使用多种模式的组合来满足了,本篇…
1.前言 书中在解释Java监视器模式的时候使用了一个车辆追踪器例子,根据不同的使用场景给出了不同的实现和优化. 2.监视器模式示例 实现一个调度车辆的"车辆追踪器",每台车使用一个String对象标识,并且拥有一个相应的位置坐标(x,y).由于运行在多线程的场景下,对外暴露的接口需要保证线程安全. 需要提供的接口包括: 获取所有车辆标识和位置 读取某个车辆位置 更新某个车辆位置 下面给出第一种实现: @ThreadSafe public class MonitorVehicleTra…