
设计模式
五道口纳什
wx公众号/B站:五道口纳什
展开
-
设计模式C++实现——工厂模式
工厂模式属于创建型模式,主要可分为三类,简单工厂、工厂方法、抽象工厂。工厂模式规定,无论是工厂函数,工厂类的成员函数,返回的对象都必须位于heap。有两点需要特别注意:堆对象三种工厂模式都属于创建型模型,所创建的对象都位于堆内存中,需要手动释放其所占内存。UML类图UML类图是把握设计模式的关键,如何将一段描述转换为UML类图,如何将UML类图转换为程序语言,是软件开发的一项基本能力。更详尽的原创 2015-11-08 10:40:00 · 1599 阅读 · 0 评论 -
utilities(C++)——单例(Singleton)
通过类名获得类实例指针禁止拷贝将构造函数声明为私有的原创 2016-03-13 15:54:48 · 1452 阅读 · 0 评论 -
Head First 设计模式 —— 单例模式(Singleton)
1. 如何保证一个类只有一个实例,且这个实例易于被访问? lazy evaluation:在用到的时候才创建对象。全局变量: 使得一个对象可以被访问,全局访问点;但不能防止实例化多个对象;如果将对象赋值给一个全局变量,那么必须在程序一开始就创建好对象。但是,如果这个对象非常耗费资源,而程序在执行的过程中又一直没有用到它;造成浪费;单件模式(singleton)提供了一个全局的访问点,像全原创 2017-08-02 12:08:33 · 872 阅读 · 0 评论 -
Head First 设计模式 —— 工厂模式与工厂方法
1. 实例化对象的方法制造对象的方法不只 new 操作符一种。且实例化这个动作不应该总是公开地进行,还有初始化常常造成耦合问题。由此提出的工厂模式以进一步封装实例化的活动,且避免对象初始化时的可能产生的耦合问题。原创 2017-07-24 11:07:33 · 859 阅读 · 0 评论 -
Head First 设计模式 —— 策略设计模式
创建一个能够根据所传递的参数对象的不同而具有不同行为(动态绑定的多态机制)的方法,被称为策略设计模式。原创 2017-07-28 11:58:00 · 836 阅读 · 0 评论 -
设计模式在各编程语言类库及框架上的应用
1. 组合(composite)模式JUnit2. 装饰器(decorator)模式Java I/O 系统;3. 适配器(Adapter)模式STL 中的 queue 和 stack queue 以及 stack 都通过在底层维护一个 deque(双端队列),限制其输入输出顺序而成就各个的容器风格;原创 2017-08-23 22:29:23 · 895 阅读 · 0 评论 -
【线程安全】—— 单例类双重检查加锁(double-checked locking)
1. 三个版本单例类的实现版本1:经典版public class Singleton { public static Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance;原创 2017-08-02 16:43:30 · 1431 阅读 · 0 评论 -
迭代器模式在 Java 容器中的实现
迭代器接口是迭代器模式实现的精髓:public interface Iterator<E> { boolean hasNext(); E next(); ...} 假设某容器名为 XxCollection(该类本身并不需实现 Iterator 接口),调用其迭代器遍历访问其所有成员时,一般是通过其 iterator() 方...原创 2018-02-03 00:08:18 · 852 阅读 · 0 评论 -
特例模式(Special Case Pattern)与空对象模式(Null Pointer Pattern)—— 返回特例对象而非 null
返回 null 值,基本上是在给自己增加工作量,也是给调用者添乱。只有一处没有检查返回的是否为 null,程序就会抛 NullPointerException 异常。如果你打算在方法中返回 null 值,不如:抛出异常,或者返回特例对象。如果你在调用某个第三方 api 中可能返回 null 值的方法,可以考虑用新方法中进一步打包(封装)这个方法,在更上层的代码中抛出异常或返回特例对象;原创 2018-01-29 22:53:37 · 3430 阅读 · 1 评论 -
设计原则 —— 针对接口编程而不针对实现编程
1. 针对接口编程是多态性的体现针对对象编程简单地说,就是传递的是具体的子类; 而针对接口编程,传递的则是父类引用,这样便可发挥多态性“父类引用指向子类对象”的特点和优势;来看一个简答的例子:public interface Animal { ... public void makeSound();}具体到“狗”,需给出其实现:public class Dog impleme原创 2017-07-24 11:42:20 · 4274 阅读 · 1 评论 -
Head First 设计模式 —— 装饰器模式与门面模式
1. 装饰器模式与继承与装饰器模式相比,继承更容易造成类爆炸;装饰器模式:利用组合取代继承;原创 2017-07-24 11:01:50 · 952 阅读 · 0 评论 -
C++设计模式::装饰模式or代理模式or面向切片编程(AOP)
一个实例 装饰模式:动态地给一个对象(而非一个类)添加一些额外的职责。就增加功能来说,装饰模式比创建子类更加灵活,因为有时我们的需求是给某个对象而不是整个类添加一些功能,比如为一部手机添加增加挂件、屏幕贴膜等等特性,一种比较灵活的方式,将手机(被装饰器类)嵌入到另一个对象(装饰器类)中(两者之间是一种组合关系),有这个对象(装饰器类)完成对象新特性的添加。如上面的装饰器UML类图所示,装饰器类原创 2015-11-20 21:16:03 · 3160 阅读 · 2 评论 -
C++设计模式——从多态到观察者模式到MVC架构
我们先从宏观整体上把握MVC的架构与流程:原创 2015-11-28 15:35:10 · 2724 阅读 · 0 评论 -
utilities(C++)——单例(Singleton) (使用智能指针 shared_ptr)
utilities(C++)——单例(Singleton) 上文简单版的单例类的实现的一大核心问题,在于new出来的堆对象不会被释放,就有可能造成内存泄漏的风险。class Singleton{public: // 通过类名获得类实例指针 static Singleton* instance() { if (!_instance)原创 2016-03-13 16:16:22 · 7604 阅读 · 0 评论 -
C++设计模式——模板方法(Template Method)
模板方法(template method)设计模式用于定义一个包含许多步骤的算法框架,允许子类重写(覆盖)算法的某一个步骤而不改变算法整体的流程和框架。例如一个算法(如聚类算法)可能包含初始化(initialization)、迭代(iteration)以及后处理(post-preprocessing)三个环节,现实中存在多种初始化(initialization)的方法。实现模板方法设计模式的手段即是原创 2016-03-17 16:02:13 · 2036 阅读 · 0 评论 -
C++设计模式——Composite 组合模式
Composite objects into a tree structure so that individual objects and compositions of objects can be treated uniformly.组合模式用于将对象(s)组合成一个树形结构,来表示部分-整体的层次关系(part-whole hierarchy),该设计模式允许客户以一个统一的方式对待每一个原创 2016-03-13 17:43:18 · 1776 阅读 · 0 评论 -
C++ 设计模式 —— 策略模式(Strategy)
策略模式是一种行为型设计模式(behavioral pattern),用于将不同的算法(算法之间的关系是平行的,也即,它们可以解决相同的问题,只不过采取了不同的策略,比如用于聚类的 Kmeans,FCM之间)封装在不同的类中,也即策略模式用于组织解决同一问题不同算法,以方便客户端(也即是下文的 Context 类)灵活地调用。最终得到算法的替换、变化可以独立于客户端完成。其 UML 类图关系如下:原创 2016-03-28 20:48:52 · 5643 阅读 · 0 评论 -
C++ 设计模式 —— 访问者(Visitor)
访问者设计模式的实现借助于两个继承体系,(1)elements:一个是被操作的类(基类及其子类)(2)visitors:一个定义了一系列操作的访问者(基类及其子类)访问者模式是一种行为型设计模式(behavioral design pattern),被用于为一个树形结构(Node、LeafNode、InternalNode)中的 elements 增加操作。使用访问者设计模式,我们不需在 el原创 2016-03-28 21:46:56 · 5025 阅读 · 1 评论 -
C++ 设计模式 —— 控制器设计模式(实现功能模块间通信)
在构建更复杂的程序时,你需要创建多个算法来协同工作,以实现一些高级功能。更合理地构建程序并让所有的类能互相通信,程序将会变得越来越复杂。因此一个类中(即为控制器类)集中对程序进行控制,是十分有益的。这正是控制器背后的思想。控制器(Controller)是一个特殊的对象,充当着程序中心的角色。原创 2016-04-16 15:06:48 · 3755 阅读 · 0 评论 -
Python 进阶 —— 装饰器函数的使用
(1)obj.__len__ ⇒ len(obj)(2)__contains__ ⇒ for … in …原创 2016-05-18 18:00:35 · 1039 阅读 · 0 评论