设计模式
Nancy_m
挨踢人员 文艺程序员高级软件攻城诗个人铭言无淡泊以明志无宁静以致远
展开
-
设计模式——开放-封闭原则
第四章——开放-封闭原则 开放-封闭原则:软件实体(类、模块、函数等等)应该可以扩展,但是不可更改。即对于扩展是开放的,对于更改是开放的。软件设计要容易维护又不容易出问题的最好的办法,就是多扩展,少修改。就是说在设计的时候要尽量让这个类是足够好的,写好了就不要修改了,如果有需求来,我们增加一些类就完事了,原来的代码能不动就不动,即在我们最初写代码时,假设变化不会发生。当变化发生时,我们原创 2012-09-26 21:25:48 · 598 阅读 · 0 评论 -
外观模式-Facade
外观模式,为子系统中的一组接口提供一个一致的界面,次模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。外观模式的结构图如下:Facade 外观类:知道哪些子系统负责处理请求,将客户的请求代理给适当的子系统对象。SubSystem Classes 子系统类集合,实现了子系统的功能,处理Facade对象指派的任务。注意子类中没有Facade的任何信息,即没有对Fa原创 2012-11-21 11:05:04 · 754 阅读 · 0 评论 -
建造者模式——Builder
1、 情景如果需要将一个复杂对象的构建于它的表示分离,使得同样的构建过程可以创建不同的表示的意图时,我们就需要一个设计模式——建造者模式。 如果我们用了建造者模式,那么用户就只需要指定需要建造的类型就可以得到它们,而具体构建的过程和细节就不需知道了。2、 建造者模式将一个复杂对象的构建于它的表示分离,使得同样的构建过程可以创建不同的表示。结构图如下:原创 2012-11-21 15:27:28 · 949 阅读 · 0 评论 -
模板方法模式
首先,说一下,如果用了继承,并且肯定这个继承有意义,就应该要成为子类的模板,所有重复的代码都应该要上升到父类中去,而不是让每个子类都去重复。当我们要完成在某一细节层次一致的一个过程或一系列步骤,但其个别步骤在更详细的层次上的实现可能不同时。我们通常考虑用模板方法模式来处理。模板方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中去。模板方法使得子类可以不改变一个算法的结构即可原创 2012-11-21 10:01:45 · 775 阅读 · 0 评论 -
观察者模式——Observer
1、 观察者模式又叫发布——订阅模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生改变时,会通知所有观察者对象。这个主题对象在状态发生变化时,同会通知所有观察者对象,使它们能够自动更新自己。结构图如下:Subject类,它把所有观察者对象的引用,保存在一个聚集里,每个subject都可以任何数量的观察者。抽象subject原创 2012-11-21 18:46:20 · 1212 阅读 · 0 评论 -
抽象工厂模式——Abstract Factory
1、 抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 结构图如下:AbstractProductA和AbstractProductB是两个抽象产品,之所以为抽象,是因为它们都有可能有两种不同的实现,如:产品1是用SQL数据库实现的、而产品2是由Access数据库实现的。AbstractFactory是一个抽象工厂接口,它原创 2012-11-22 17:02:01 · 1271 阅读 · 0 评论 -
组合模式——Composite
1、 组合模式将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。组合模式的结构图如下:Component为组合中的对象声明接口,在适当情况下,实现所有类共有接口的默认行为。声明一个接口用于访问和管理Component的子部件。 Leaf:在组合中表示节点对象,叶节点没有子节点。 Co原创 2012-11-22 20:58:57 · 1242 阅读 · 0 评论 -
状态模式——State
1、 状态模式(State)当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化。状态模式的结构图如下:State:抽象状态类,定义一个接口以封装与Context的一个特定状态相关的行为。Concret原创 2012-11-25 15:56:25 · 892 阅读 · 0 评论 -
组合模式——Composition
1、 组合模式将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。组合模式的结构图如下:Component为组合中的对象声明接口,在适当情况下,实现所有类共有接口的默认行为。声明一个接口用于访问和管理Component的子部件。 Leaf:在组合中表示节点对象,叶节点没有子节点。 Compos原创 2012-11-24 22:45:18 · 1479 阅读 · 0 评论 -
迪米特法则
迪米特法则: 如果两个类不必彼此直接通信,那么着两个类就不应当发生直接的项目作用。如果其中一个需要调用另外一个类的某一方法的话,可以通过第三者转发这个调用。 迪米特法则首先强调的前提是在类的结构设计上,每一个类都应当尽量降低成员的访问权限,也就是说,一个类包装好自己的private状态,不需要让别的类知道的字段或行为就不要公开。需要公开的字段通常通过属性来体现了。迪原创 2012-11-21 10:03:07 · 1297 阅读 · 0 评论 -
单例模式——Singleton
1、单例模式——Singleton 单例模式,保证一个类仅有一个实例,并提供一个访问它的全局访问点。 通常我们可以让一个全局变量使得一个对象被访问,但它不能防止你实例化多个对象,一个最好的办法就是,让类自身负责保存它的唯一实例。这个类可以保证没有其他实例可以被创建,并且他可以提供一个访问该实例的方法。单例模式的结构图如下:单例模式因为Si原创 2012-11-25 16:53:25 · 825 阅读 · 0 评论 -
设计模式——单一职责原则
第三章 单一职责原则单一职责原则:就一个类而言,应该仅有一个引起它变化的原因。 如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会消弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当变化发生时,设计会遭受到意想不到的破坏。如果,能够想到多于一个动机去改变一个类,那么这个类就具有多于一个的职责,就应该考虑类的职责分离。原创 2012-09-26 19:52:05 · 628 阅读 · 0 评论 -
设计模式——依赖倒转原则
第五章 依赖倒转原则依赖倒转原则:A、高层模块不应该依赖底层模块。两个都应该依赖抽象。B、抽象不应该依赖细节。细节应该依赖抽象。即:要针对接口编程,不要对实现编程。不管高层模块还是底层模块,它们都依赖与抽象,具体一点就是借口或者抽象类,只要接口是稳定的,那么任何一个的更改都用担心其他的收到影响,这就使得无论高层模块还是底层模块都可以很容易地被复用。原创 2012-09-26 21:43:56 · 822 阅读 · 0 评论 -
设计模式学习-简单工厂
简单工厂 先抽象出一个基类,基类具有子类所共同有的操作(方法),将程序的不同的功能封装在继承于父类的子类中,在子类中重载父类的操作(方法),再创建一个工厂类,在工厂类中实现创建不同的子类对象。从而使程序具有可扩展、以维护性,也来实现代码的复用。 此为本人阅读《大话设计模式》时的个人感悟,所以,不能保证完全叙述正确,如有异原创 2012-09-09 21:50:45 · 1019 阅读 · 0 评论 -
设计模式——里氏代换原则
第六章 里氏代换原则 里氏代换原则:子类型必须能够替换掉它们的父类型。即,一个软件实体如果使用的是一个父类的话,那么一定适用于其子类,而且它觉察不出父类对象和子类对象的区别。也就是说,在软件里面,把父类替换成它的子类,程序的行为没有变化。正是由于里氏代换原则的存在才使得扩展开放-封闭成为可能。高、底层模块之间无依赖关系,二者都依赖与抽象(借口)。原创 2012-09-28 10:22:02 · 828 阅读 · 0 评论 -
迭代器模式——Iterator
1、 迭代器模式(Iterator)提供一种方法顺序访问一个聚合对象中各个元素,而不不暴露该对象的内部表示。当需要访问一个聚焦对象,而且不管这些对象是什么都需要遍历的时候,就应该考虑使用迭代器模式。特别当需要对聚焦有多种方式遍历时,更应该考虑迭代器模式,为遍历不同的聚焦结构提供如开始、下一个、是否结束、当前哪一个等统一接口。 迭代器模式的结构图如下:Ag原创 2012-11-24 22:39:14 · 1475 阅读 · 2 评论 -
备忘录模式——Memento
1、 备忘录模式(Memento)在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。被网络模式结构图Originator(发起人):负责创建一个备忘录,用以记住当前时刻它的内部状态,并可使用备忘录恢复内部状态。Originator可根据需要决定Memento存储Originator的那些内部状态。Mem原创 2012-11-25 16:17:24 · 955 阅读 · 0 评论 -
合成/聚合复用原则
合成/聚合复用原则合成/聚合复用原则,尽量使用合成/聚合,尽量不要使用类继承。对象的继承关系是在编译时就定义好的,所以,无法再运行时改变从父类继承的实现。子类的实现与它的父类有非常紧密的依赖关系,以至于父类实现中的任何变化必然会导致子类发生变化。当你需要复用子类时,如果继承下来的实现不合适解决新的问题,则父类必须重写或被其他更合适的类替换。这种依赖关系限制了灵活性并最终限制了复用性。原创 2012-11-25 21:58:15 · 1170 阅读 · 0 评论 -
适配器模式——Adapter
1、 适配器模式(Adapter)将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的哪些类可以一起工作。 也就是说系统的数据和行为都是正确的但接口不符时,我们应该考虑用适配器模式,目的是使控制范围之外的一个原有对象与某个接口匹配。适配器模式主要应用于希望复用一些现存的类,但是接口又与复用环境要求不一致的情况,比如说需要对早期原创 2012-11-25 16:20:41 · 1174 阅读 · 0 评论 -
桥接模式——Bridge
1、 桥接模式——Bridge将抽象部分与它的实现部分分离,使它们都可以独立地变化。什么叫抽象与它的实现分离,这并不是说,让抽象类与其派生类分离,因为这没有任何意义。实现指的是抽象类和它的派生类用来实现自己的对象。由于实现的方式有多种,桥接模式的核心意图就是把这些实现独立出来,让它们独自地变化。这就使得每种实现的变化不会影响其他实现,从而达到应对变化的目的。 桥接模式的原创 2012-11-25 21:57:00 · 1053 阅读 · 0 评论