设计模式
文章平均质量分 83
wangs7_
努力学习!
展开
-
08设计模式—Command、 Visitor、Interpreter
08行为变化 & 领域问题行为变化在组件的构建过程中,组件行为的变化经常导致组件本身剧烈的变化。"行为变化"模式将组件的行为和组件本身进行解耦合,从而支持组件行为的变化,实现两者之间的松耦合。行为一般是指一段代码,所以天然的行为就和对象形成了编译时的紧耦合。Command(命令)在软件构建过程中,"行为请求者"与"行为实现者"通常呈现一种紧耦合。但是在某些场合————比如需要对行为进行记录、撤销、重做、等事物处理,这种无法抵御变化的紧耦合是不合适的。将一个请求封装成一个对象,从而使你可用原创 2021-09-21 00:31:10 · 120 阅读 · 0 评论 -
07设计模式—Composite、Iterator、Chain of Responsiblity
07数据结构常常有一些组件在内部具有特定的数据结构,如果客户程序依赖这些特定的数据结构,将极大地破坏组件的复用。这时候,将这些特定的数据结构封装在内部,在外部提供统一的接口,来实现与特定数据结构无关的访问,是一种行之有效的解决方案。Composite(组合)将对象组合成树形结构以表示 “部分-整体” 的层次结构。Composite使得用户对单个对象和组合对象的使用具有一致性。对于Composite模式,采用树形结构来实现普遍存在的对象容器,从而将"一对多"的关系转化为"一对一"的关系,使得客户代码可原创 2021-09-13 21:27:44 · 130 阅读 · 0 评论 -
06设计模式—Memento、State
06状态变化在组件的构建中,某些对象的状态经常面临变化,如何对这些变化进行有效的管理,同时又维持高层模块的稳定是一个很重要的问题。"状态变化"模式为这一问题提供了一种解决方案。Memento(备忘录)在软件构建过程中,某些对象的状态在转换过程中,可能由于某些需要,要求程序能够回溯到对象之前处于某个点时的状态。如果使用一些共有接口来让其他对象得到对象的状态,遍会暴露对象的细节实现。备忘录在不破坏封装性的前提下,捕获一个对象内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态原创 2021-09-08 22:01:25 · 160 阅读 · 0 评论 -
05设计模式—Facade、Proxy、Adapter、Mediator
05接口隔离在组件构建过程中,某些接口的直接依赖常常会带来很多问题、甚至根本无法实现。采用添加一层间接(稳定)接口,来隔离本来互相紧密关联的接口是一种常见的解决方案。Facade 外观模式为了降低系统的复杂性。一个常见的设计目标是使用子系统间的通信和相互依赖关系。为子系统中的一组接口提供一个一致的界面,Facade 模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。Facade 更多的是一种设计思想是从架构的层次去看整个系统,没有固定的代码结构。但是它并不是一个集装箱,可以任意地放进原创 2021-09-03 19:35:37 · 278 阅读 · 0 评论 -
04设计模式—Singleton、Flyweight
04对象性能面向对象很好地解决了"抽象"的问题,但是必不可免地要付出一定的代价。但是某些情况下,面向对象所带来的成本必须谨慎处理。Singleton 单件模式保证一个类仅有一个实例,并提供一个访问它的全局访问点(绕过常规的构造器)。这是类的设计者的责任,而不是使用者的责任。单例模式的设计需要考虑线程安全的问题,如下考虑。Singleton* Singleton::m_instance = nullptr;// 线程非安全版本Singleton* Singleton::getInstance()原创 2021-08-31 20:24:53 · 150 阅读 · 0 评论 -
03设计模式— Factory Method、Abstract Factory、Prototype、Builder
对象创建通过"对象创建"模式绕开 new,避免对象创建(new)过程中所导致的紧耦合(依赖具体类),从而支持对象创建的稳定。它是接口抽象之后的第一步工作。Factory Method 工厂方法定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method 使一个类的实例化延迟到其子类。其中:Product 定义工厂方法所创建的对象接口,简单来说就是我们要创建的目标对象的抽象基类。ConcreteProduct 实现 Product 接口,对应我们要创建的目标对象的原创 2021-08-26 18:53:42 · 212 阅读 · 0 评论 -
02设计模式— Decorator、Bridge
单一职责 模式Decorator 装饰动机希望给某个对象而不是整个类添加一些功能,能够动态地给一个对象添加一些额外的职责。由于过度地继承来扩展对象的功能,由于继承为类型引入的静态特质,使得这种扩展方式缺乏灵活性;并且随着子类的增多(扩展功能的增多),各种子类的组合(扩展功能的组合)会导致更多子类的膨胀。动态地给一个对象添加一些额外的职责。就增加功能而言,Decorator模式比生成子类(继承)更为灵活(能够有效消除重复代码并且减少子类个数)。这样就诞生了 Decorator 模式,我们可以使用组合原创 2021-08-26 18:50:55 · 98 阅读 · 0 评论 -
01设计模式— Template Method、Strategy、Observer
01组件协作Template Method 模版方法Template Method 模版方法是一种类行为模式,比较官方的说法是:一项任务有稳定的整体操作结构,但是子步骤有很多改变,能够定义一个算法的骨架,而将一些步骤延迟到子类中的模式。通俗点讲,就是定义一个类实现完整的框架流程,但是其中部分具体的细节对外提供接口,由外部实现的方法,具体体现在一个类(C++)中如果有虚函数(Java中使用的是重载)那么这个类就有极大的可能使用了模版方法。这种处理方法,与C语言中的回调函数(函数指针)有些类似,实现的是一原创 2021-08-24 22:35:24 · 84 阅读 · 0 评论 -
0 设计模式简介
0 设计模式简介什么是设计模式简单来说,设计模式就是解决不断重复问题的方案。其精髓在于增加代码的复用性。当然这里的复用性是指编译层面的复用性,不是简单的复制粘贴。对于机器而言每当源文件发生"改变",在整体编译的时候就会从新编一发生改变的文件。而设计模式要做的就是减少和避免改变的发生,更多的是扩展。设计模式更多的是注重问题的解决方案,而非具体的实现方法和编程语言。设计模式的核心思想设计模式的核心思想就是用面向对象的设计方式实现松耦合的、结构化的高复用的问题解决方案。要正确的理解"隔离变化"正确处理原创 2021-08-20 19:37:09 · 298 阅读 · 0 评论