设计模式
胆识与智慧
在探索中成长
展开
-
设计模式 学习笔记(1) 单例模式之饿汉式
单例模式单例模式,就是指一个类有且仅有一个对象实例。例如做一个学生成绩管理系统,我定义了一个“系统类”,用于存储数据,类似于“数据库”的功能。这个系统类当然只能有一个对象实例了;如果有多个实例,就会导致数据不同步。1. 饿汉式饿汉式,简单来讲,就是预先建立一个对象,设为 null ( Java中不可以这么写, C++中可以 ),不管什么时候需要用这个类,就返回这个唯一的对象引用或者...原创 2018-04-30 15:03:33 · 270 阅读 · 0 评论 -
C++ 学习笔记(27)Flyweight Pattern
Flyweight Pattern享元模式生活中的实例:(1)Word 等文档编辑器中,会出现很多的重复字母,例如“的”,“I”, "you"等,如果出现了 1000 次,就需要生成 1000 个对象(2)LOL 等近亲游戏中,小兵这一角色,数量极多,但它们其实有很多的共同点,不必生成那么多对象(3)围棋中,黑白棋子除了位置不一样,其他特征都是一样的,如果可以共享,就只需要两个实际存储的对...原创 2018-09-25 20:49:59 · 186 阅读 · 0 评论 -
C++ 学习笔记(25)Composite Pattern
Composite Pattern组合模式考虑一个系统,存在层次管理关系,例如公司内董事长之下,有多个经理,每个经理之下都由若干个部门,每个部分都若干个员工,如果采用面向对象的思想来设计这样一个树状的系统?建立统一基类对象:Component分类:内节点(枝干),外节点(叶子)特点:(1)内节点可以有孩子,外节点不可以有孩子;(2)内节点的孩子可以是内节点,也可以是孩子区别...原创 2018-09-20 11:39:14 · 212 阅读 · 0 评论 -
C++ 学习笔记(24)Facade Pattern
Facade Pattern 外观模式生活中的例子:(1)通过总开关,接入和切断电源(2)网站导航主要思想:定义一个外观类(外覆器),为子系统的一组接口提供统一的接口。在这些子系统和使用子系统的客户之间建立一层“缓冲层”,这个缓冲层接收客户的访问请求,然后将任务分配到诸子系统中。外观模式之前:class Com_1 { public: void run(); } ;cla...原创 2018-09-20 10:08:28 · 145 阅读 · 0 评论 -
C++ 学习笔记(26)Decorator Pattern
Decorator Pattern装饰者模式假设现在要对一个已有的类进行功能拓展,思路可以选用继承。但是如果要拓展的功能比较多,而且功能之间可以随意搭配,例如两种主材料 A, B, C, 可以搭配的材料有 X, Y, Z ,如果继续采用继承,就大致如下:// -----------------------------------------class Meterial {} ;...原创 2018-09-25 17:23:09 · 236 阅读 · 0 评论 -
C++ 学习笔记(23)Prototype Pattern
Prototype Pattern原型模式好博客 原型模式很简单,关键就是通过基类指针调用派生类的 copy constructor#include <iostream>#include <memory>#include <string>class Base {public: virtual ~Base() = default; v...原创 2018-09-19 10:35:21 · 176 阅读 · 0 评论 -
C++ 学习笔记(22) Builder Pattern
Builder Pattern建造者模式。考虑生活中的常见场景——餐厅订餐。该餐厅决定提供 N 中套餐 (setMenu 类描述),主要描述如下:namespace Restaurant { // 产品类, 此景中为 套餐(set menu) class setMenu { private: std::vector<std::string> mealOrder...原创 2018-09-19 00:14:31 · 329 阅读 · 0 评论 -
C++ 学习笔记(21)Adaptor Pattern
Adaptor Pattern适配器模式,把一个类的接口改成希望的接口。考虑一个这样的类 Invoker, 缺少 method_2 方法,希望能想办法调用这个函数class Invoker {} ;恰好,另一个类 Adaptee 拥有 method_2 方法class Adaptee {public: void mothod_2() {}} ;目标是达到 Inv...原创 2018-09-18 20:25:51 · 271 阅读 · 0 评论 -
C++ 学习笔记(20) Template Method Pattern
Tamplate Method Pattern 模板方法模式:针对一连串有固定顺序的操作,把共有部分集中到基类中,不同部分分散到不同子类中去实现。C++ 对此还有一种特殊的设计 NVI 。 设计出发点:(1)提高代码复用性, 不同派生类的共同部分集中在基类中(2)基类通过对派生类的具体实现来拓展不同的功能。 生活中的例子:(1)炒菜,炒不同的菜,会有相...原创 2018-09-18 11:13:09 · 323 阅读 · 0 评论 -
设计模式 学习笔记(1) 单例模式之懒汉式
**懒汉式构造单例类** 懒汉式,指的就是需要时再构造(延迟构造),在效率上会优于饿汉式,因为饿汉式在进入 main 之前就要构造,懒汉式不用。基本特点是:线程不安全基本模板(加锁):#include <bits/stdc++.h>#define rep( i , j , n ) for ( int i = int(j) ; i < int(n) ; +...原创 2018-08-02 11:33:23 · 183 阅读 · 0 评论 -
设计模式(3) 策略模式 初步实现多种登陆策略
现在我要实现教师,学生,管理员不同登录方式的系统设计思路 一个抽象策略类,由多种登录策略继承 一个登录系统,内含一种策略作为参数 可以更改策略 未解决的问题 暂不支持多用户,因为只允许一时间一种策略 抽象策略类class Strategy {public: virtual void Login () = 0 ;...原创 2018-05-12 22:03:54 · 2820 阅读 · 0 评论 -
设计模式(2) 工厂模式 ( 二 ) 学生成绩管理系统设计
续上篇 工厂模式 ( 一 ) 学生成绩管理系统设计 一个实体”根类” Entity , 派生出三种类——老师,学生,课程 一个接口工厂,派生出三种工厂,分别 Create 老师,学生,课程 挂一个尚未解决问题的设计 我的想法是,将工厂类和 Entity 实体类都继承自一个“单根类”,Object ——就类似于 Java 的 Object, 这样一来就会很方便。利...原创 2018-05-11 21:07:31 · 708 阅读 · 1 评论 -
设计模式(2) 抽象工厂(一) 学生成绩管理系统设计
续上篇 工厂模式(一) 学生成绩管理设计一个实体"根类" Entity , 派生出三种类——老师,学生,课程一个接口工厂,派生出三种工厂,分别 Create 老师,学生,课程可以考虑,不同学院之间的老师,学生,课程是不同的,例如计算机学院和经济管理学院的教师(假设无重叠),学生,课程(课程大多是不同的)。现在,我想要产生老师的工厂,可以产生不同学院的老师,例如——这个特制工厂,可以...原创 2018-08-01 17:37:21 · 509 阅读 · 0 评论 -
设计模式(2) 工厂模式 ( 一 ) 学生成绩管理系统设计
最近在做课程设计——学生成绩管理系统角色有:老师,学生,课程老师,学生,课程都继承同一个接口 Entity我采用工厂模式,一个接口工厂,三种不同的工厂,每种工厂分别产老师,学生和课程通过工厂把产生的不同种类的 Entity 收集起来,由接口的工厂统一释放内存。以下是程序分块:Entity 实体定义:class Entity {protected: int NO ;public: strin...原创 2018-05-11 01:19:56 · 1708 阅读 · 0 评论