
设计模式学习之旅
一步一步学习设计模式
「已注销」
这个作者很懒,什么都没留下…
展开
-
单例模式升级版
模板单例带参数版原创 2022-06-17 11:25:28 · 93 阅读 · 0 评论 -
模板单例类
// Singleton.h#ifndef SINGLETON_H#define SINGLETON_H// 单例模板类template<typename T>class Singleton{public: static T* getInstance(void) { if (m_pInstance == nullptr) { m_pInstance = new T(); } return m_pInstance; }protected: S原创 2021-10-26 22:12:24 · 222 阅读 · 0 评论 -
设计模式之迭代器模式
迭代器模式的定义:提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。迭代器模式是一种对象行为型模式。行为型模式指的是多个类/对象之间通过协作关系完成某项功能,分为类行为型模式(继承方式实现)和对象行为型模式(组合方式实现)。迭代器模式的优点:访问一个聚合对象的内容而无需暴露它的内部表示。遍历任务交由迭代器完成,这简化了聚合类。它支持以不同方式遍历一个聚合,甚至可以自定义迭代器的子类以支持新的遍历。增加新的聚合类和迭代器类都很方便,无须修改原有代码。封装性良好,为遍历不原创 2021-09-17 17:58:15 · 93 阅读 · 0 评论 -
设计模式之状态模式
在软件开发过程中,应用程序中的部分对象可能会根据不同的情况作出不同的行为,我们把这种对象称为有状态的对象,而把影响对象行为的一个或多个动态变化的属性称为状态。状态模式:对有状态的对象,把复杂的"判断逻辑"(通常使用switch…case结构)提取到不同的状态对象中,允许状态对象在其内部状态发生改变时改变其行为。状态模式属于一种对象行为型模式。主要优点:结构清晰,状态模式将与特定状态相关的行为局部化到一个状态中,并且将不同状态的行为分割开来,满足SIP(单一职责原则)。将状态转换显示化,减少对象间原创 2021-09-16 23:23:58 · 105 阅读 · 0 评论 -
设计模式之观察者模式
观察者模式在实际应用中用到的比较多,比如QT中信号-槽机制,MVC模式中的模型-视图,这些都是基于观察者模式。定义:指多个对象之间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。主要优点:降低了目标与观察者之间的耦合关系,两者之间是抽象耦合关系。符合依赖倒置原则。目标与观察者之间建立了一套触发机制。UML图如下:示例代码:// 抽象目标abstract class Subject { protected List<Observe原创 2021-09-16 17:55:12 · 65 阅读 · 0 评论 -
设计模式之外观模式
外观模式是一种很常用的设计模式,几乎随处可见,比如第三方库中封装的接口,这个接口可能是有很多种方案,但只提供了唯一接口供调用。再比如微信中的九宫格,提供统一的入口。外观模式相对比较简单,只有三种角色:子系统角色:实现系统的部分功能,客户可以通过外观角色访问它。外观角色:为多个子系统对外提供一个共同的接口。客户角色:通过一个外观角色访问各个子系统的功能。其UML图如下:示例代码:public class FacadePattern { public static void main原创 2021-08-30 14:44:12 · 94 阅读 · 0 评论 -
设计模式之装饰器模式
装饰器模式是一种动态扩展类功能的模式。比如我们给一个游戏人物添加装饰时,可以先给他穿鞋子,然后穿外套,最后戴帽子,也可以先穿外套,再穿鞋子,最后戴帽子。装饰器模式的角色有四个:抽象构件角色:定义一个抽象接口以规范准备接收附加责任的对象。具体构件角色:实现抽象构件,通过装饰角色为其添加一些职责。抽象装饰角色:继承抽象角色,并包含具体构件的实例,可以通过其子类扩展具体构件的功能。具体装饰角色:实现抽象装饰的相关方法,并给具体构件对象添加附加的责任。其UML图如下:示例代码:public原创 2021-08-30 14:36:51 · 194 阅读 · 0 评论 -
设计模式之桥接模式
桥接模式是一种将抽象与实现分离的模式,用于拥有多个维度对象的设计。比如带颜色的图形,就可以从颜色和形状两个维度进行拆分。桥接模式是把可以拆分的维度当做一种类中的一个成员进行使用的,它的结构分为:抽象化角色:定义抽象类,并包含一个对是实现化对象的引用。扩展抽象化:是抽象化角色的子类,实现父类中的业务方法,并通过组合关系调用实现化角色中的业务方法。实现化角色:定义实现化角色的接口,供扩展抽象化角色调用。具体实现化角色:给出实现角色接口的具体实现。UML图如下:示例代码:package br原创 2021-08-30 14:24:47 · 82 阅读 · 0 评论 -
设计模式之适配器模式
适配器模式是在目标和适配者之间建立一层链接,可以将适配者接口转换为目标接口。适配器分为类结构型模式和对象结构型模式两种,前者采用继承方式,后者采用组合方式。类结构型适配器模式的UML如下:代码如下:// 目标接口,提供给客户使用interface Target { public void request();}// 适配者接口class Adaptee { public void specificRequest() { System.out.printl原创 2021-08-26 10:43:46 · 73 阅读 · 0 评论 -
设计模式之代理模式
代理模式是结构型模式中的一种相对简单的设计模式。代理模式是隔绝目标对象和访问对象的,使之没有直接访问关系。使用代理模式的原因由两个:一个是保护目标对象,一个是增强目标对象。其UML图如下:代码如下:// 代理模式由抽象主题、具体主题和代理类组成// 抽象主题interface Subject { void Request();}// 具体主题class RealSubject implements Subject { public void Request() {原创 2021-08-23 11:00:49 · 101 阅读 · 0 评论 -
设计模式之建造者模式
建造者模式也是创建型模式中的一种,所谓的创建型模式,指的是如何创建对象,关注的是对象的创建过程。建造者模式是将一个复杂对象分解成多个相对简单的子模块进行创建,比如游戏中常见的人物模型,在大多数游戏中,都有游戏角色的创建,把头部中的脸型、发行、穿着等当作人物创建的局部对象处理。创建者模式的UML图如下:示例代码:// 建造者模式由产品、抽象建造者、具体建造者和指挥者四个部分组成// 产品class Product { private String partA; private原创 2021-08-23 10:55:17 · 89 阅读 · 0 评论 -
设计模式之抽象工厂
抽象工厂是对工厂方法的进一步抽象,它将工厂与产品之间的对应关系提升至m:n。UML图如下:与工厂方法一样,抽象工厂模式也有抽象产品、具体产品、抽象工厂和具体工厂四个组件构成。这里的抽象工厂还是只有一个,但是对应的抽象产品确是有多个。代码示例:// 抽象产品:动物类interface Animal { public void show();}// 具体产品:马类class Horse implements Animal { JScrollPane sp; JFra原创 2021-08-19 14:04:36 · 84 阅读 · 0 评论 -
设计模式之简单工厂模式
简单工厂模式是一种创建型模式,也就是如何生成对象的方式。简单工厂类似于现实中的工厂,一个工厂里生成多个产品。所以工厂与产品的比例为1:n。UML图如下:// 抽象产品public interface Product { void show();}// 具体产品1static class ConcreteProduct1 implements Product { public void show() { System.out.println("具体产品1显示..原创 2021-08-17 16:49:59 · 71 阅读 · 0 评论 -
设计模式之工厂模式
工厂模式是对简单工厂的进一步抽象和改进,将工厂和产品的关系从1:n在这里插入代码片提升至1:1,也就是一个工厂生产专一的产品。UML图如下:示例代码:// 抽象产品:提供了产品接口interface Product { public void show();}// 具体产品1:实现抽象产品中的抽象方法class ConcreteProduct1 implements Product { public void show() { System.out.pri原创 2021-08-17 09:34:44 · 87 阅读 · 0 评论 -
当我们在谈论面向对象的时候,我们到底在谈论什么?
什么是面向对象编程和面向对象编程语言?面向对象编程的英文缩写是OOP,全称是Object Oriented Programming。对应地,面向对象编程语言的英文缩写是OOPL,全称是Object oriented Programming Language。面向对象编程中有两个非常重要、非常基础的概念,那就是类(class)和对象(object)。如果不按照严格的定义来说,大部分编程语言都是面向对象编程语言,比如Java、C++、Go、Python、C#、Ruby、JavaScript、Objectiv原创 2020-08-09 23:08:37 · 164 阅读 · 0 评论 -
第2章 面向对象、设计原则、设计模式、编码规范、重构,这五者有何关系?
面向对象现在,主流的编程范式或者是编程风格有三种,分别是面向过程、面向对象和函数式编程。现在比较流行的编程语言大部分都是面向对象编程语言。大部分项目也是基于面向对象编程风格开发的。面向对象编程因为其具有丰富的特性(封装、抽象、继承、多态),可以实现很多复杂的设计思路,是很多设计原则、设计模式编码实现的基础。设计原则设计原则是指导我们代码设计的一些经验总结。对于每一种设计原则,我们需要掌握它的设计初衷,能解决哪些编程问题,有哪些应用场景。只有这样,我们才能在项目中灵活恰当地应用这些原则。主要有以下常用的原创 2020-08-08 21:57:21 · 315 阅读 · 0 评论 -
第1章 从哪些维度评判代码质量的好坏?如何具备写出高质量代码的能力?
对于程序员来说,辨别代码写得”好”还是”烂”,是一个非常重要的能力。这也是我们写出好代码的前提。毕竟,如果我们连什么是好代码、什么是烂代码,都分辨不清,又谈何写出好代码呢?最常用的评价标准有哪几个?可维护性、可读性、可扩展性、灵活性、简洁性、可复用性、可测试性。1.可维护性落实到编码开发,所谓的”维护”无外乎就是修改bug、修改老的代码、添加新的代码之类的工作。所谓”代码易维护”就是指,在不破坏原有代码设计、不引入新的bug的情况下,能够快速地修改或者添加代码。所谓”代码不易维护”就是指,修改或者添原创 2020-08-07 23:34:58 · 1152 阅读 · 0 评论