OOD
iteye_21194
这个作者很懒,什么都没留下…
展开
-
设计模式简介
什么是设计模式?? 设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。 设计模式的分类:创建型模式:对象实例的创建方式。 简单工厂模式(Simple Factory); 工...原创 2016-04-27 10:16:04 · 62 阅读 · 0 评论 -
设计模式的理解--观察者模式
观察者模式: 定义了对象之间一对多依赖,当一个对象改变状态时,它所有依赖都者会得到通知。 个人理解:时常会用到对某个对象的监控,如属性变化时得到被观察者得知: publicvoid setName(String newName) {//可以使用代理monitorA.propertyChange("name",this.name,newName);monitorB.pr...原创 2014-05-07 22:33:02 · 112 阅读 · 0 评论 -
设计模式的理解-装饰模式
装饰模式: 动态地将职责附加到对象上,若要扩展功能,装饰者提供了比继承更有弹性的替代方案。 包装原对象,在原对象职责基础上附加职责,是对原对象的扩展,由于包装者与原对象有相同的接口,因此对调用者而言是包装是透明的,对调用者无影响。 1.扩展原始对象方法的功能:在原始对象的原有方法上附加功能,动态改变其行为,而由于多态的特性对调用者没有影响如:pu...原创 2014-05-07 22:35:39 · 99 阅读 · 0 评论 -
设计模式的理解--工厂模式
工厂模式:将对象的创建从业务逻辑中分离,可以做到统一创建,而不是分散在各个业务模块中创建,需要修改时可以统一控制。业务逻辑中去除了对象的创建,更新清清晰,对接口编程时,也可以通过工厂方便替换对象,对业务逻辑无影响。工厂产生对象时,可以增加一些处理如代理装饰等等。 简单工厂模式: 通过一个方法来创建不同的对象。 在createProdcut方法内部需要通过produ...原创 2014-05-08 22:06:24 · 104 阅读 · 0 评论 -
设计模式的理解--单例模式
单例模式:确保一个类只有一个实例,并提供一个全局的访问点。 为什么用单例模式:无状态类:只需要一个实例就够了。多实例只会多占用内存,无线程安全问题。有状态类:可以做到全局共享状态,但要注意线程安全问题。 如何确保一个类只有一个实例: 1.将构建器设为private,以确保该类不能被外部实例化 2.在类的内部进行实例化,并把实例保存在静态变量中...原创 2014-05-09 21:35:39 · 110 阅读 · 0 评论 -
设计模式的理解--组合模式
组合模式:允许你将对象组合成树形结构来表现“整体/部分”层次结构,组合能让客户以一致的方式来处理个别对象以及组合对象。 示例:定义树形节点:/** * 树节点,具有添加移除子节点,遍历所有节点的能力 * @author yanlei * */public interface TreeNode { public void addTreeNo...原创 2014-05-14 02:38:53 · 77 阅读 · 0 评论 -
设计模式的理解--适配器模式
适配器模式: 将一个类的接口,转换成客户期望的另一个接口。适配器让原本不可以调用的接口变为可以调用。原创 2014-05-14 22:09:24 · 71 阅读 · 0 评论 -
设计模式的理解--外观模式
外观模式(Facade):提供一个统一的接口,用来访问子系统中的一群接口。外观模式提供了一个更高层次的接口,使访问子系统更加简单。 外观模式是在客户与子系统中间又加了一层,隔离了客户与子系统,使客户不了解子系统内部调用关系,使子系统的调整,对客户遭成影响降至更低。 没有外观模式情况: 增加外观模式情况: 对于复杂的子系统:尽管外观模式降低了...原创 2014-05-14 22:13:42 · 87 阅读 · 0 评论 -
设计模式的理解--模版方法模式
模版方法模式: 在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模版方法使子类在不改变算法结构的情况下,重新定义算法中的某些步骤。 模版方法适用于固定的执行步聚(这个不可以改变),但允许子类在每个步骤上有自已的实现或使用默认实现。 ...原创 2014-05-14 22:18:33 · 86 阅读 · 0 评论 -
OOD 设计原则
1. 封状变化找出应用中可能需要变化之处,把它们独立出来, 不要和那些不需要变化的代码混在一起。 区分可变及不变因素,对可变因素进行封装,一般用接口封装,达到可以随时替换可变因素而程序结构无需变动。 对于变化部分尽量用接口封状。 2.针对接口编程,应用接口不同的实现对程序结构无影响 3.单一职责 可以降低耦合度 每一个类都有...原创 2014-05-07 22:28:35 · 229 阅读 · 0 评论 -
设计模式的理解--策略模式
策略模式: 定义了算法族,分别封装起来,让他们之间可以相互替换,让算法的变化独立于使用算法的客户。 个人理解: 需要做一件事情,但事情的内容是不确定的,可能是事情A,可能是事件B,由某些条件决定 在程序中体现为:public class Person {public void doOneThing(事件类型){if(事件类型 ==事情A){//这样做...原创 2014-05-06 22:46:21 · 73 阅读 · 0 评论 -
类的设计--继承
使用继承可以做到: 1.代码的复用 2.对外部调用类,呈现多态, 即变化 3.父类代码的修改可以影响所有子类(子类未覆盖父类方法情况下) 1.抽取所有子类 中相同的(通用的)的功能,形成独立的方法,放到父类里,利用继承的特性,所有子类自动具有该方法的能力。 对于某些不需要些方法的的子类,在子类中可以选择覆盖该方法而形成空方法,或方法内抛...原创 2014-05-04 23:27:20 · 215 阅读 · 0 评论 -
面象对象的概念
类的产生: 1.事物类:通过对问题领域内的某一类事物的分析,抽取其共同特征(主要是属性特征),而生成类,一般表述某一事物。 2.功能类:为了解决某一程序问题构造出来的类,该类提供了某些功能来解决问题。 类的实例: 事物类的实例,由于属性有不同的值,而表示不同的具体事物。 通常为N多例。功能类的实例,一般为单例或几个实例。 继承:如一些类,具...原创 2014-03-03 15:39:29 · 140 阅读 · 0 评论 -
类与美女
类的设计原则: 如果将类比做office美女,那么她应该具有: 1.苗条的身材:臃肿不招人喜欢 2.明确的职责:只负责做XX事(没有职责就失去了存在的意义) 3.懒惰的情格:XX之外的事,我不管 4.谨慎的承诺:不轻意做出承诺,承诺超多干的越多 寻找有类似职责的干爹: 1.权势的干爹:找个类似职责的权势的干爹,能帮你做好多事,外系统的...原创 2014-03-03 15:46:12 · 499 阅读 · 0 评论 -
类之间的关系
generalization 泛化:A类扩展了B类,则A类与B类是扩展关系。 说明A类是B类所代表类型的一个分类,A类的职责在B类职责范围内或A类职责是对B类职责的扩展。 realization 实现:A类实现了接口B,则A类与B类是实现关系。 ...原创 2014-03-04 10:16:57 · 167 阅读 · 0 评论 -
类的设计--接口
需要一个类提供某些功能,这些功能可能有不同的实现方式,可以把它设计为接口。 1.首先明确接口职责范围,职责需要高内聚的,即相关性的职责,无关的职责不应该加进来。 2.按照分析好的职责范围定义接口 3.建立类,简单的对接口实现:类中建立需要的方法,每个方法功能单一、简洁,方法内用伪代码简单写一下,因为可能会重构 4. 将多个实现类的共用方法抽取而形成一个抽像...原创 2014-03-05 13:46:35 · 461 阅读 · 0 评论 -
封 装
每一个类都应该有自己的职责,职责应该是单一类型的,就是我只做这一类的事情,其它的事件不需要我来管,而”这一类事情“有紧密的相关性,也就是高内聚。 类中每个方法都应该功能单一、代码简洁,如果有多个地方使用的相同的代码块,应该将该代码块抽成独立的private的方法。 封状的意义在于降底耦合度,只对外提供能够完成职责的方法,而封闭内部实现细节和数据等。 类中...原创 2014-03-05 16:18:08 · 92 阅读 · 0 评论 -
单例与多例、无状态与有状态
单例:某个类系统范围内只有一个实例多例:某个类在系统范围内同时有多个实例无状态类:类中没有状态信息,一般是无成员变量或成员变量的值是不变的。 有状态类:类中有状态信息,一般表现成员变量的值可变,在某一时该被调用而改变状态,之后再调用时获取其正确的状态。有状态类的实例 ,一般是多例的,用于保存多个相同类型的不同状态值。因为只有一个实例,单线程重复调用情况下可能覆盖实例中之前的成...2014-03-05 23:17:57 · 1558 阅读 · 0 评论 -
枚举--策略模式
某个功能或算法有多种实现方式,可以使用策略模式: 枚举类也可以实现策略模式类似的功能:(前提:实现个数固定)枚举类声明一个抽像的方法,由各个实例去实现。 枚举实例的选择: 1.直接引用Scope.实例名 2.由字符串生成 Scope.valueOf("实例名"); 示例:(参考了Struts 2.3.26 的Scope源码)public...原创 2014-03-10 16:28:39 · 163 阅读 · 0 评论 -
解耦设计--职责的细化
一个工厂用于创建对象,如果对象在指定范围内存在(singleton,thread,request,session),则不创建新对象,而是使用之前创建的对象。UML类图如下: 每个实现类中都有一样创建对象的过程,因此将生成对象方法抽成父类: 父类ObjectFactoryImpl实现了对象创建的过程,在创建对象之前(create方法中)首先调用抽像方法getObjectFrom...原创 2014-03-11 17:15:11 · 179 阅读 · 0 评论 -
设计模式的理解--命令模式
命令模式:将请求封状成对象,这可以让你使用不同的请求、队列或者日志请求来参数化其它对象,命令模式也可以支持撤销操作。 当需要将发出请求的对象和执行请求的对象解耦的时候,使用命令模式。 命令模式的目的: 为了能够通用的执行某些方法或任务 找出可变元素:被调类,被调用方法,被调用方法参数将可变元素封装成Command对象,执行被调用类、被调用方法参数,在execut...原创 2014-05-14 22:23:32 · 85 阅读 · 0 评论