Pistachio's Blog

Later equals never.

【创建型】外观模式

一、定义为子系统中的一组接口(不稳定)提供一个一致(稳定)的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用(复用)。 二、结构 体现了一种设计原则和思想的表达,子系统内部和外部的解耦。红色部分是稳定的,蓝色部分是不稳定的数据 三、总结 Facade模式更注重从架构的层次去看整个系统(多个类形成系统级别的设计),而不是单个类的层次。Facade更多是一种架......

【结构型】享元模式

一、定义运用共享技术有效地支持 大量细粒度对象 (如字符串、线程池)。 模式动机:软件系统采用纯粹对象方案的问题在于,大量细粒度对象会很快充斥在系统,从而带来很高的运行代价。(主要指内存需求方面的代价) 二、结构 基本思想(共享): 在共享池中查找对象是否创建过,如果对象创建过,则直接返回对象;否则先创建对象,把该对象放到共享池中。不过有些对象不支持恭共享。 三、使用场景123456789......

【创建型】单例模式

一、定义保证一个类仅有一个实例,并提供一个该实例的全局访问点。 二、结构 三、创建方式12345678class Singleton {private: Singleton(); // 使其私有化,只能自己使用,别人不能使用,故放在private Singleton(const Singleton& other);public: static Sin......

差分数组

一、区间和检索(数组不可变)1、先求数组的前缀和presum; 2、再求区间presum[right - 1] - presume[left]的值 LC303. 区域和检索 - 数组不可变 给定一个整数数组 nums,处理以下类型的多个查询: 计算索引 left 和 right (包含 left 和 right)之间的 nums 元素的 和 ,其中 left <= right 实......

【创建型】工厂模式

一、动机面向接口编程 实例化时不要写具体的类 1ISplitter * splitter = new FileSpliter(); // 不推荐:FileSpliter * splitter = new FileSpliter(); 但C++或者其它语言不支持抽象基类上创建对象,不管在栈上声明对象或在堆上new对象,都不可以 1ISplitter sp; // 不可取 二、定义定义一......

【结构型】桥接模式

一、定义将抽象部分(业务功能)与实现部分(平台实现)分离,使它们都可以独立地变化。 二、结构 三、总结 Bridge模式使用“对象间的组合关系”(抽象的指针),解耦了抽象与实现之间固有的绑定关系,使得抽象和实现之间可以沿着各自的维度变化(子类化)。 Bridge模式的应用一般在“两个非常强的变化维度”,有时一个类也有多于两个的变化维度,这时可以使用Bridge的扩展模式。 编译时装配转为 ......

设计模式总览

八大面向对象设计原则 如果模式违背了设计原则,则这个模式是错误的。 一、依赖倒置原则(DIP) 高层模块(稳定)不应该依赖底层模块(变化),二者都该依赖抽象(稳定)。 抽象(稳定)不应该依赖实现细节,实现细节(变化)应该依赖抽象(稳定)。 例如A依赖B,就是A在编译时B需要存在,才能编译通过(此处的依赖通常是指编译时依赖,只有抽象在才能编译通过)。 (Before) (After) ......

【行为型】观察者模式

一、定义定义对象间的一种一对多(变化)的依赖关系,以便当一个对象的状态发生改变时,所有依赖它的对象都得到通知并自动更新。 二、结构 使用面向对象的抽象,Observer模式使得我们可以独立地改变目标与观察者(通过add/remove),从而使二者之间的依赖关系达致松耦合。 目标发送通知时,无需指定观察者,通知会自动传播。 观察者自己决定是否需要订阅通知,目标对象对此一无所知。......

【行为型】策略模式

一、定义策略模式定义了一系列算法,把它们一个个封装起来,并且可以使它们可相互替换(变化)。该模式使得算法可独立于使用它的客户端程序(稳定)而变化。 二、结构 Strategy及其子类为组件提供了一系列可重用的算法,从而可以使得类型在运行时方便地根据需求在各个算法之间进行切换。 Strategy模式提供了用条件判断语句(if/else)以外的另一种选择,消除条件判断语句,就......

最长回文子串

求最长回文子串是面试中常考的题目,这道题有三种解法:动态规划、中心扩展法和Manacher算法。 给你一个字符串 s,找到 s 中最长的回文子串。 如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。 示例 1: 123>输入:s = "babad">输出:"bab">解释:"aba" 同样是符合题意的答......