
设计模式
文章平均质量分 70
李建忠老师的设计模式课笔记
用户名溢出
这个作者很懒,什么都没留下…
展开
-
“状态变化”模式之 Memento模式(备忘录)
在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态。-----设计模式 GOF备忘录(momento)存储原发器(Originator)对象的内部状态,在需要的时候恢复原发器状态momento模式的核心是信息隐藏,即Originator需要向外隐藏信息,保持其封装性。但同时又需要将状态保持到外界(Momento)这个模式看起来有点过时,因为我们有很多序列化的手段,但是我们需要知道该模式的思想。原创 2022-11-18 13:26:57 · 378 阅读 · 0 评论 -
18. “状态变化”模式 之State模式(状态模式)
允许一个对象在其内部状态改变的时候改变它的行为(其实里里面使用的是多态,即前面代码中NetworkProcessor中维护的NetworkState *pState;)。从而使对象看起来似乎修改了其行为。------《设计模式》GOFState模式将所有与一个特定状态相关的行为(Operation1、2、3)都放入到一个State的子类对象中,在对象状态切换时,切换相应的对象;但同时维持State的接口,这样实现了具体操作于状态转换之间的解耦。原创 2022-11-02 23:24:40 · 260 阅读 · 0 评论 -
17. “接口隔离“模式之 Mediator模式(中介者)
用一个中介对象来封装(封装变化)一些列的对象交互。中介者使个对象不需要显式的互相引用(编译时依赖 -> 运行时依赖),从而使其耦合松散(管理变化),而且可以独立地改变他们之间的交互。----《设计模式》GOF将多个对象间复杂的关联关系解耦,Mediator模式将多个对象间的控制逻辑进行集中管理,变“多个对象互相关联”为“多个对象和一个中介者关联”,简化了系统的维护,抵御了可能的变化。随着控制逻辑的复杂化,Mediator具体对象的实现可能相当复杂。这时候可对Mediator对象进行给你分解处理。原创 2022-11-01 23:36:50 · 120 阅读 · 0 评论 -
16. “接口隔离模式”之 适配器模式
将一个类的接口转换成客户希望的另一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。-----《设计模式》GOFAdapter模式主要用于“希望复用一些现存的类,但是接口又与复用环境不一致的情况”,在遗留代码复用、类库迁移等方面非常有用。GOF 23定义了两种Adapter模式的实现结构:对象适配器和类适配器。但类适配器是用过“多继承”的实现方式,一般不推荐使用。对象适配器采用“对象组合”的方式,更符合松耦合精神。原创 2022-11-01 23:03:44 · 131 阅读 · 0 评论 -
15. “接口隔离模式”之 Proxy模式
为其他对象提供一种代理以控制(隔离,使用接口)对这个对象的访问。----《设计模式》GOF“增加一层间接层”是软件系统中对很多复杂问题的一种常见解决方法。在面向对象系统中,直接使用某些对象会带来很多问题,作为间接层的proxy对象便是解决这一问题的常用手段具体proxy模式的实现方法、实现粒度都差别很大(即上面ver2代码中SubjectProxy的process方法),有些可能对打个对象做细粒度的控制,如copy on write技术,有些可能对组件模块提供抽象代理层,在架构层次对对象做proxy。原创 2022-11-01 22:32:53 · 296 阅读 · 0 评论 -
14. 接口隔离模式之Facade模式(门面模式/外观模式)
比如数据访问系统,数据访问会牵扯到很多方面的对象,比如连接对象,命令对象,数据表,参数对象。。。如果不加约束,不考虑任何设计的话,很容易就会写出A方案这种,外部使用对象和内部的命令对象、数据表...直接耦合,而且后续内部如果进行修改,也会直接影响到外部。为系统中的一组接口提供一个一致(稳定)的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用(复用)原创 2022-10-29 13:38:02 · 323 阅读 · 0 评论 -
13. 对象性能模式之 Flyweight 享元模式
运用共享技术有效地支持大量细粒度的对象---《设计模式》GOF面向对象很好的解决了抽象性的问题,但是作为一个运行在机器中的程序实体,我们需要考虑对象的代价问题。Flyweight主要解决面向对象中的代价问题,一般不触及面向对象的抽象性问题。Flyweight采用对象共享的做法来降低系统中对象的个数,从而降低细粒度对象对系统带来的内存压力。在具体实现方面,要注意对对象状态的处理(因为我们创建完对象之后,对象的状态是一般情况下是不能更改的,往往这种对象创建出来是只读的)原创 2022-10-29 13:13:23 · 102 阅读 · 0 评论 -
12. 对象性能模式之 单例模式(Sigleton)
保证一个类仅有一个实例,并提供一个该实例的全局访问点。---《设计模式》GOFSigleton模式中的实例构造器可以设置为protected以允许子类派生。Sigleton模式一般不要支持拷贝构造函数和Clone接口,因为这可能会导致多个对象实例。原创 2022-10-27 23:04:49 · 468 阅读 · 0 评论 -
11. 对象创建模式之 Builder模式(构建器)(不常用)
将一个复杂对象的构建和其表示相分离,使得同样的构建过程(稳定)可以创建不同的表示(变化)原创 2022-10-27 13:32:43 · 1088 阅读 · 0 评论 -
10. 对象创建模式之 原型模式(使用较少)
使用原型实例指定创建对象的种类,然后通过拷贝这些原型来创建对象。原创 2022-10-26 13:45:41 · 82 阅读 · 0 评论 -
9. “对象创建“模式 之 Abstract Factory
这就会有一种风险,外部传进来的connection工厂是SQL Server的,但是Command却是Oracle的,这样必然会出现问题。那直接将这三个工厂里面的虚方法集成到一个类里面不就可以了?EmployManager中集成了3个相互依赖的关系的工厂类。原创 2022-10-26 00:22:44 · 102 阅读 · 0 评论 -
8. 对象创建模式 之 工厂方法
定义一个用于创建对象的接口(工厂类创建的虚接口),让子类(具体工厂类)决定实例化哪一个类。FactoryMethod使得一个类的示例化延迟(目的:解耦,手段:虚函数)到子类--《设计模式》GOFFactory Method模式用于隔离类对象的使用者和具体类型之前的耦合关系。面对一个经常变化的具体类型,紧耦合关系(new)会导致软件的脆弱Factory Method模式通过面向对象的手段,将所要创建的具体对象工作延迟到子类,从而实现一种扩展(而非更改)的策略,较好的解决了这种紧耦合的关系。原创 2022-10-25 13:54:29 · 834 阅读 · 0 评论 -
“单一职责” 之 桥模式
将抽象部分(业务功能)与实现部分(平台实现)分离,使它们都可以独立变化—《设计模式》GOFBridge模式使用“对象间的组合关系”解耦了抽象和实现之间固有的绑定关系,使得抽象和实现可以沿着各自的维度变化,所谓抽象和实现沿着各自维度的变化,即“子类化”它们Bridge模式有时候类似于多继承方案,但是多继承往往违背了单一职责原则,复用性比较差,Bridge模式是比多继承更好的解决方法。Bridge模式的应用,一般在“两个非常强的变化维度。原创 2022-10-25 00:12:01 · 481 阅读 · 0 评论