06 2016 档案
设计模式(25)-----中介者模式
摘要:中介者(Mediator) 定义 用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。 UML图 角色 Mediator:中介者接口。在里面定义了各个同事之间相互交互所需要的方法,可以是公共的方法,如Change方法,也可以是 阅读全文
posted @ 2016-06-30 19:57 韩思明 阅读(188) 评论(0) 推荐(0)
设计模式(24)-----责任链模式
摘要:责任链模式(chain of responsibility) 定义 责任链模式是对象的行为模式。使多个对象都有机会处理请求,从而避免请求的发送者和接受者直接的耦合关系。将这些对象连成一条链,沿着这条链传递该请求,直到有一个对象处理它为止。 UML类图 角色 抽象处理者(Handler)角色 :定义一 阅读全文
posted @ 2016-06-29 18:21 韩思明 阅读(185) 评论(0) 推荐(0)
设计模式(23)-----命令模式
摘要:命令模式(command) 定义 将一个请求封装成为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。 UML类图 角色 Command:定义命令的统一接口 ConcreteCommand:Command接口的实现者,用来执行具体的命令,某些情况下可以 阅读全文
posted @ 2016-06-29 17:20 韩思明 阅读(221) 评论(0) 推荐(0)
设计模式(22)-----桥接模式
摘要:桥接模式(bridge) 定义 将抽象部分与实现部分分离,使它们都可以独立的变化。 UML类图 角色 Bridge模式基于类的最小设计原则,通过使用封装,聚合以及继承等行为来让不同的类承担不同的责任。它的主要特点是把抽象(abstraction)与行为实现(implementation)分离开来,从 阅读全文
posted @ 2016-06-27 13:56 韩思明 阅读(211) 评论(0) 推荐(0)
设计模式(21)-----单例模式
摘要:单例模式(singleton) 定义 保证一个类仅有一个实例,并提供一个访问他的全局访问点。 例子 第一种方法 第二种方法 第三种方法 第四种方法 第五种方法 总结 如果是比较简单的单例类设计,对于一般的应用,构造方法内的代码不涉及到读取配置、远程调用、初始化IOC容器等长时间执行的情况,则可以使用 阅读全文
posted @ 2016-06-27 10:52 韩思明 阅读(154) 评论(0) 推荐(0)
设计模式(20)-----迭代器模式
摘要:迭代器模式(Iterator) 定义 提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。 UML类图 角色 迭代器角色(Iterator): 负责定义访问和遍历元素的接口。 具体迭代器角色(Concrete Iterator):实现迭代器接口,并要记录遍历中的当前位置。 容器角 阅读全文
posted @ 2016-06-26 15:21 韩思明 阅读(348) 评论(0) 推荐(1)
设计模式(19)-----组合模式
摘要:组合模式(Composite) 定义 将对象组合成树形结构以表示'部分-整体'的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。 UML类图 成员 Component 是组合中的对象声明接口,在适当的情况下,实现所有类共有接口的默认行为。声明一个接口用于访问和管理Component子 阅读全文
posted @ 2016-06-26 14:48 韩思明 阅读(169) 评论(0) 推荐(0)
设计模式(18)-----备忘录模式
摘要:备忘录模式(memento) 定义 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象回复到原先保存的状态。 UML图 角色说明 备忘录(Memento)角色 (1)将发起人(Originator)对象的内战状态存储起来。备忘录可以根据发起人对象的判断来 阅读全文
posted @ 2016-06-25 20:56 韩思明 阅读(158) 评论(0) 推荐(0)
设计模式(17)-----适配器模式
摘要:适配器模式(adapter) 定义 将一个类的接口转换成客户希望的另外一个接口,Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 UML类图 例子 在NBA的赛场上,姚明还不会说英文,教练也不会说中文,所以需要一个翻译,对应的,翻译就起到了适配器的作用。 篮球运动员类 外 阅读全文
posted @ 2016-06-25 20:02 韩思明 阅读(181) 评论(0) 推荐(0)
设计模式(16)-----状态模式
摘要:状态模式(State) 定义 当一个对象的内在状态改变时允许改变其行为,这个帝乡看起来像是改变了其类。 UML类图 例子 State Context 开始状态 制作状态 完成状态 客户端 结果 ok,成功! 总结 在状态模式中,环境(Context)是持有状态的对象,但是环境(Context)自身并 阅读全文
posted @ 2016-06-24 21:56 韩思明 阅读(206) 评论(0) 推荐(0)
设计模式(15)-----抽象工厂模式
摘要:抽象工厂模式(abstract factory) 定义 提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。 UML图 例子 在开发的过程难免会遇到更换数据库的事情,也就意味着会出现大量的代码修改。而使用抽象工厂模式,可以很好的避免修改的行为。现在有两个操作对象,一个是用户,一个是部 阅读全文
posted @ 2016-06-24 21:18 韩思明 阅读(245) 评论(0) 推荐(0)
设计模式(14)-----观察者模式
摘要:观察者模式(Observer) 定义 定义了一种一堆多的依赖关系,让多个观察者对象同时监听某一个主题对象,这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。 UML类图 成员角色 抽象主题(Subject)角色:抽象主题角色把所有对观察者对象的引用保存在一个聚集(比如Arr 阅读全文
posted @ 2016-06-23 20:58 韩思明 阅读(174) 评论(0) 推荐(0)
设计模式(13)-----建造者模式
摘要:建造者模式(builder) 定义 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 UML图 成员介绍 抽象建造者(Builder)角色:给 出一个抽象接口,以规范产品对象的各个组成成分的建造。一般而言,此接口独立于应用程序的商业逻辑。模式中直接创建产品对象的是具体建造者 阅读全文
posted @ 2016-06-23 20:24 韩思明 阅读(218) 评论(0) 推荐(0)
设计模式(12)-----外观模式
摘要:外观模式(Facade) 定义 模式为子系统中的各类(或结构与方法)提供一个简明一致的界面,隐藏子系统的复杂性,使子系统更加容易使用。 UML图 例子 方法A 方法B 方法C 外观模式核心类 客户端 结果 OK,成功 总结 在遇到以下情况使用Facade模式: 1、当你要为一个复杂子系统提供一个简单 阅读全文
posted @ 2016-06-22 20:42 韩思明 阅读(137) 评论(0) 推荐(0)
设计模式(11)-----迪米特法则
摘要:迪米特法则(Demeter) 定义 一个软件实体尽量少的与其他实体发生相互作用。 原则 不要和“陌生人”说话、只与你的直接朋友通信。 其中直接朋友包含以下几类: (1) 当前对象本身(this); (2) 以参数形式传入到当前对象方法中的对象; (3) 当前对象的成员对象; (4) 如果当前对象的成 阅读全文
posted @ 2016-06-22 20:10 韩思明 阅读(222) 评论(0) 推荐(0)
设计模式(10)-----模板方法模式
摘要:模板方法模式(Template Method) 定义 定义了一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 UML类图 例子 AbstractClass 模板方法1 模板方法2 客户端 结果 OK,成功。 总结 模板方法模式 阅读全文
posted @ 2016-06-21 22:11 韩思明 阅读(147) 评论(0) 推荐(0)
设计模式(9)-----原型模式
摘要:原型模式(Prototype) 定义 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 UML结构图 浅复制 ProtoType 客户端 结果 问题分析 在基本数据类型(int,double,float...)和String对象时,这种复制是没有什么问题的,因为浅复制只对值进行复制, 阅读全文
posted @ 2016-06-21 21:52 韩思明 阅读(181) 评论(0) 推荐(0)
设计模式(8)-----工厂方法模式
摘要:工厂方法模式(Factory Method) 定义 定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类延迟到其子类。 UML类图 组成 1)抽象工厂角色(Creator): 这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。在java中它由 阅读全文
posted @ 2016-06-20 17:58 韩思明 阅读(164) 评论(0) 推荐(0)
设计模式(7)-----代理模式
摘要:代理模式(Proxy) 定义 为其他对象提供一种代理以控制对这个对象的访问。 UML结构图 例子 一个人希望去追求一个女生,但是不好意思直接送礼物给女生,所以就只有找一个女生的朋友,代表他去送礼物,和女生直接接触的并不是该追求者,而是中间的代理对象。 女生 追求者 代替送礼物的人 客户端 OK,代理 阅读全文
posted @ 2016-06-20 16:59 韩思明 阅读(225) 评论(0) 推荐(0)
垃圾回收算法(2)-----标记清除法
摘要:标记清除法 原理 标记清除算法是现在垃圾回收算法的基本思想。大概分为两个阶段:标记阶段和清除阶段。在标记阶段,首先通过根节点,标记所有从根节点开始的可达对象。因此,未被标记的对象就是未被引用的垃圾对象。在清除阶段,清除所有未被标记的对象。 从图上可以看到,不可达的垃圾对象被清除了,而从根节点可以到达 阅读全文
posted @ 2016-06-19 16:14 韩思明 阅读(1120) 评论(0) 推荐(1)
设计模式(6)-----装饰模式
摘要:装饰模式 定义 动态地给一个对象添加一些额外的职责,就增加功能来说说,装饰模式比生成子类更为灵活。 装饰模式结构图 例子 还是继续车子的例子,现在是组装汽车,在汽车上组装各种部件。 Component(Component) Car(ConcreteComponent) Decorator(Decor 阅读全文
posted @ 2016-06-19 16:03 韩思明 阅读(159) 评论(0) 推荐(0)
设计模式(5)-----依赖倒转原则
摘要:依赖倒转原则 定义 A.高层模块不应该依赖底层模块。两个都应该依赖抽象。 B.抽象不应该依赖细节。细节应该依赖抽象。 在面向对象的世界里,所谓的抽象指的就是借口和抽象类,而对于依赖倒转原则自己更深的理解就是“面向接口编程”。 例子 在一个汽车自动检测系统中,该系统可以自动对车子进行run和stop的 阅读全文
posted @ 2016-06-19 14:56 韩思明 阅读(180) 评论(0) 推荐(0)
垃圾回收算法(1)-----引用计数法
摘要:引用计数法(Reference Counting) 主要内容 对于一个对象A,只要有任何一个对象引用了A,则A的引用计数器就加1,当引用失效时,引用计数器就减1.只要对象A的引用计数器的值为0,则对象A就不可能再被使用。 主要缺点 可能造成循环引用,无法回收的情况。例如,如下图,我们构造了一个列表, 阅读全文
posted @ 2016-06-17 13:41 韩思明 阅读(338) 评论(0) 推荐(0)
设计模式(4)-----开放,封闭原则
摘要:开放封闭原则(OCP) 定义 所有面向对象原则的核心。软件设计本身所追求的目标就是封装变化、降低耦合,而开放封闭原则正是对这一目标的最直接体现。软件实体应该是可扩展,而不可修改的。也就是说,对扩展是开放的,而对修改是封闭的。 例子 简单工厂模式就是违背了开放封闭原则的,所以后面才会有工厂模式,抽象工 阅读全文
posted @ 2016-06-17 10:05 韩思明 阅读(259) 评论(0) 推荐(0)
设计模式(3)-----单一职责原则
摘要:单一职责原则(SRP) 定义 就一个类而言,应该仅有一个引起它变化的原因。一个类,只有一个引起它变化的原因。应该只有一个职责。每一个职责都是变化的一个轴线,如果一个类有一个以上的职责,这些职责就耦合在了一起。这会导致脆弱的设计。当一个职责发生变化时,可能会影响其它的职责。另外,多个职责耦合在一起,会 阅读全文
posted @ 2016-06-17 09:29 韩思明 阅读(136) 评论(0) 推荐(0)
设计模式(2)-----策略模式
摘要:策略模式(strategy) 定义 它定义了算法家族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化,不会影响到使用算法的客户。 方法 (1) 环境对象:该类中实现了对抽象策略中定义的接口或者抽象类的引用。 (2) 抽象策略对象:它可由接口或抽象类来实现。 (3) 具体策略对象:它封装了实 阅读全文
posted @ 2016-06-16 11:14 韩思明 阅读(180) 评论(0) 推荐(0)
设计模式(1)-----简单工厂模式
摘要:简单工厂模式 简单工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。 工厂类 客户端代码 总结: 阅读全文
posted @ 2016-06-16 10:54 韩思明 阅读(271) 评论(0) 推荐(0)
软件工程之建议
摘要:时光荏苒,一学期的时间很快就过去了,这是我第一次接触到软件工程的概念,这也是第一次让我知道了,软件并不是简简单单的开发,而是要经过一个漫长的过程,分析,设计,编码,测试等等,这也是为什么我们专业名字叫软件工程,而我们的李老师同时教了我们三门课程,几乎包含了整个软件工程,下面我就简单说下我对软件工程这 阅读全文
posted @ 2016-06-03 09:43 韩思明 阅读(354) 评论(0) 推荐(0)