几种常用的设计模式(DHMENG4)

前面几篇文章介绍了几种设计模式,都是比较常用的,为了便于记忆,我特地叫朋友对这几个设计模式做了录音,这里再介绍两种模式:

模板方法

1、 模板方法模式:定义了一个操作中的算法骨架,将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 2、 模板方法模式是通过把不变行为搬到超类,去除子类中的重复代码来体现它的优势,当不变的和可变的行为在方法的子类实现中混合在一起的时候,不变的行为就会在子类中重复出现。我们通过模板方法模式把这些行为搬移到单一(基类中)的地方,这样就帮助子类摆脱重复的不变行为的纠缠。

录音链接:4,http://changba.com/s/-yrmv3UeEfMI2aMONUv93A?code=Gt1bjDM0qnHCJdoHUPnwOOYWQJwXDKFuMiX3thMkUUm0aqF33KLsEjC24ZWZO5Lxts4UeDkLUmE9u-vjV2ayHaCUYydr9P3fp_PXwimlAum80jKaTGd5dw

demo如下:

首先我们先新建一个模板类Templet,定义算法的骨架:

Templet.h

Templet.cpp

其次,我们再新建两个继承自Templet的两个子类,并实现父类中的几个虚函数:

TestTempletWithA.h

TestTempletWithA.cpp

TestTempletWithB.h

TestTempletWithB.cpp

这俩个子类都继承了父类的几个虚函数,但俩个子类中实现虚函数功能不同,调用时用多态,具体看main函数:

在这里我用的demo非常简单,但是设计模式最重要的是思想,下面我们看策略模式:

1—抽象策略角色: 策略类,通常由一个接口或者抽象类实现。

2—具体策略角色:包装了相关的算法和行为。

3—环境角色:持有一个策略类的引用,最终给客户端调用。

4−策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。

我们写一个demo来实现两个数的加,减,乘,除

首先我们新建一个抽象接口类Strategy:

Strategy.h

两个数相加类:

TestStrategyWithAdd.h

TestStrategyWithAdd.cpp

两个数相减类:

TestStrategyWithSub.h

TestStrategyWithSub.cpp

两个数相乘类:

TestStrategyWithMul.h

TestStrategyWithMul.cpp

两个数相除类:

TestStrategyWithDiv.h

TestStrategyWithDiv.cpp

我们用4个子类分别将抽象类具体化,于是我们还要写一个管理这4个子类的管理类Manager:

Manager.h

Manager.cpp

在这个管理类中我们可以看到,依然是用了多态

最后我们看一下main函数

我们看到,在使用时只需要与管理类直拉交互。

时间: 2024-10-02 23:31:14

几种常用的设计模式(DHMENG4)的相关文章

几种常用的设计模式介绍

几种常用的设计模式介绍                                         1.    设计模式的起源 最早提出“设计模式”概念的是建筑设计大师亚力山大Alexander.在1970年他的<建筑的永恒之道>里描述了投计模式的发现,因为它已经存在了千百年之久,而现代才被通过大量的研究而被发现. 在<建筑的永恒之道>里这样描述:模式是一条由三个部分组成的通用规则:它表示了一个特定环境.一类问题和一个解决方案之间的关系.每一个模式描述了一个不断重复发生的问题,

超详细:6种常用的设计模式总结

单例模式 简单点说,就是一个应用程序中,某个类的实例对象只有一个,你没有办法去new,因为构造器是被private修饰的,一般通过getInstance()的方法来获取它们的实例.getInstance()的返回值是一个对象的引用,并不是一个新的实例,所以不要错误的理解成多个对象.单例模式实现起来也很容易,直接看demo吧 public class Singleton { private static Singleton singleton; private Singleton() { } pu

几种常用的设计模式(DHMENG3)

设计模式之代理模式 Demo如下: 定义一个虚基类,声明三个纯虚函数,我定义一个Person类 Person.h 定义一个Student类来继承这个Person类,并实现相应的虚函数 Student.h Student.cpp 定义一个代理类Delegate,同时继承自Person类 Delegate.cpp main函数里边 看着好像是代理对象在做这件事情,但是它其实是调用了真正做这件事情的方法做这件事 当然在OC中,一般都将代理方法写成一个协议,看事例如下: (分正式协议与非正式协议,大家有

几种常用的设计模式(DHMENG2)

设计模式之观察者模式 1.AbstractNotifier类(主题或抽象通知者类):一般用一个抽象类或接口实现.它把所有对观察者对象的引用保存在一个聚集里,每个主题都可以有任何数量 的观察者.抽象主题提供一个接口可以增加或删除观察者对象. 2.AbstractObserver类(抽象观察者类):为所有具体观察者定义一个接口,在得到主题的通知时更新自己.这个 接口叫做更新接口.抽象观察者一般用一个抽象类或接口实现.更新接口通常包括一个update方法,这个方法叫做更新方法. 3.ConcreteN

几种常用的设计模式(DHMENG1)

设计模式之单例模式 在OC中当一个控制器要在多个地方用到时,将考虑用单例 同理在C++中,当一个类在多个场景中都会用上,且多个场景在这个类中都有值的传递时,用单例模式 比如游戏主角的一个背包可以写成单例 需要注意的是: 1>,在使用单例时,这个单例方法sharedPackageLayer必需要声明为私有方法. 2>,DHPackage成员变量为static成员变量:static PackageLayer * DHPackage = NULL;

PHP V5 的五种常用设计模式

设计模式 一书将设计模式引入软件社区,该书的作者是 Erich Gamma.Richard Helm.Ralph Johnson 和 John Vlissides Design(俗称 "四人帮").所介绍的设计模式背后的核心概念非常简单.经过多年的软件开发实践,Gamma 等人发现了某些具有固定设计的模式,就像建筑师设计房子和建筑物一样,可以为浴室的位置或厨房的构造方式开发模板.使用这些模板或者说设计模式 意味着可以更快地设计更好的建筑物.同样的概念也适用于软件. 设计模式不仅代表着更

iOS常用的设计模式

iOS中常用的设计模式 ( 1 ) 代理模式 应用场景: 当一个类的某些功能需要由别的类来实现,但是又不确定具体会是哪个类实现. 优势: 敏捷原则: 开放 - 封闭原则 实例:tableView的 数据源delegate,通过和protocol的配合,完成委托诉求. 列表row个数delegate自定义的delegate ( 2 ) 观察者模式 应用场景:一般为model层对,controller和view进行的通知方式,不关心谁去接收,只负责发布信息. 优势: 解耦合 敏捷原则: 接口隔离原则

最常用的设计模式(单例模式)

记得刚开始涉足程序的时候, 去笔试 ,发现有一个笔试题经常粗线,写一个单例模式的基本实现, 当时没研究设计模式也就不知为何物, 到今日  , 才发现它已成为我日常开发最常用的一种设计模式. 我写的所有设计模式的代码都会用java 呈现, 虽然第一个学习的是c++但是 最开始作为工作的是java,并且有点偏好java 单例模式 , 意思就是 整个系统仅只有此类的一个实力, 当然这只是狭义的单例,经常看到变种的单例是允许,创建指定数量的实例的 单例模式是一种创建型模式. 它是优化的一种策划, 避免重

【动力节点java培训】J2ee常用的设计模式

[动力节点java培训]J2ee常用的设计模式 Java中的23种设计模式: Factory(工厂模式),      Builder(建造模式),      Factory Method(工厂方法模式), Prototype(原始模型模式),Singleton(单例模式),    Facade(门面模式), Adapter(适配器模式),    Bridge(桥梁模式),       Composite(合成模式), Decorator(装饰模式),    Flyweight(享元模式),