• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
 






CS106A

 
 

Powered by 博客园
博客园 | 首页 | 新随笔 | 联系 | 订阅 订阅 | 管理

[置顶] 观察者模式
摘要: 定义一对多的依赖关系,使得当一个对象发生改变时,其它相关对象能自动得到通知并更新自身的状态。结构图: 上图中,由一个Subject(或者由其派生的)类对象维持任意数量的Observer(或其派生)类对象与它的联系,当Subject对象的状态发生变化时,所有相关的Observer对象都会获得一个更新通知(Subject::Notify),并通过查询Subject的状态来保持同步(另一种方式是,Subject直接发生变化的状态在Notify中推送(push)到Observer对象中,后文会述及)。 具体而言,以内容订阅为例:一个内容提供者Provider(ConcreteSubject),... 阅读全文
posted @ 2012-07-17 18:32 CS106A 阅读(993) 评论(0) 推荐(1)
 

2012年7月16日

策略模式
摘要: 在一族算法中,每一个算法都单独进行封装,并且各个算法间可以任意替换。策略模式使这些算法的替换动作独立于正在使用这些算法的代码。在程序设计中,对象常常会根据用户的需求不同而进行多种不同的操作,或者是对象本身的一些行为(方法)会随用户的要求而改变。结构图:Context类代表操作对象;Strategy类提供算法(操作、行为)族的抽象接口供Context调用ConcreteStrategyX代表具体的算法(操作、行为)。具体而言,以一个简单的数据排序情景为例:这里需要选择不同的排序算法,对同一段数据进行排序,可供选择的排序算法有插入排序、快速排序和堆排序。ArrayData类(Context),是我 阅读全文
posted @ 2012-07-16 15:43 CS106A 阅读(1228) 评论(0) 推荐(0)
 

2012年7月15日

单件模式
摘要: 单件模式确保类只有唯一的一个实例对象,并提供全局访问。 这一句对单件模式的描述,可以再细化一下分为两点: 1、 唯一的一个实例对象。2、该对象全局访问性质。 可以看出,使用全局变量可以实现第二点,即程序可以在任意时刻对该对象进行访问,但并不能保证该类型的对象只有一个(因为在程序中任意处可以new出新的该类对象)。 为了避免程序使用new操作符创建出多余的对象,因此在实现时,应该将该类型的构造函数声明为protected,这样防止了该类型成员函数以外的代码对构造函数的调用。 View Code 1 class Singleton 2 { 3 protected: 4 S... 阅读全文
posted @ 2012-07-15 13:53 CS106A 阅读(1559) 评论(2) 推荐(0)
 

2012年6月7日

原型模式
摘要: 意图: 用原型实例指定创建对象的种类,及复制这些原型来创造新的对象。结构图:在应用工厂模式创建对象时,需要为工厂类建立与产品类相同的继承层次,就算所有的产品都属于同一种类,相互之间只存在很小的差异,我们也不得不派生出许多工厂子类来生产这些产品。为了减少这种子类化工作,也可以采用在创建对象时传入参数,来选择创建何种对象,但是这无疑增加了生产者和产品耦合性,使得再要增加或者修改产品种类,变得不够方便。并且,系统如何传入适当的参数以生产不同产品也存在问题。那么,原型模式的引入,就可以解决这两方面的问题。原型模式通过对原型实例的复制来创建新的对象,Prototype类,为一个抽象类,用以定义一个抽象接 阅读全文
posted @ 2012-06-07 00:23 CS106A 阅读(984) 评论(0) 推荐(0)
 

2012年6月3日

建造者模式
摘要: 意图:将复杂对象的表现形式同其构造相分离,这样,同样的构造过程就可以产生不同的表现形式。结构图:对于一个复杂的对象,其各个部分可能会需要使用不同的算法,或者是创建过程,但是,虽然各个部分的需求会产生变动,但是作为构造一个整体的过程:需要创建的部分,各个部分的创建顺序等,保持相对的稳定。在系统创建这样的对象时,通过采用建造者模式,可以将对象的表现形式和其创建过程分离开来,同时,通过Director类降低了系统对对象创建的耦合性。通常,建造者模式的使用有如下流程:具体而言,当我们需要组建一个房间(对应上图的Client),其中包括了床(Bed),书桌(Desk),椅子(Chair)等东西。Room 阅读全文
posted @ 2012-06-03 15:23 CS106A 阅读(955) 评论(0) 推荐(0)
 

2012年6月1日

抽象工厂
摘要: 意图:提供一个接口,以创建一族相关联的对象,而不用去指定它们的具体类。结构图:系统设计中,可能需要用到一系列具有相同风格(比如视觉风格的UI控件:WIN或者MAC风格),如果直接将各风格的元素对象真接编码到代码中:{ WinButton* button = new WinButton(); WinForm* Form = new WinForm(); ......}当需要更改元素风格时,需要将代码中所有出现过对象都一处一处更改,显然,这样的硬编码风格是不足取的。此时,即是抽象工厂模式所发力的时刻:首先:需要为这些元素,此处即以控件为例,建立一个工厂接口类,提供生产对不同的控件的方法接口,如下: 阅读全文
posted @ 2012-06-01 07:26 CS106A 阅读(363) 评论(0) 推荐(0)
 

2012年5月28日

工厂模式
摘要: 对于在系统中创建并使用的对象,因为某些原因,比如需求变动,导致对象的具体实现发生了根本性的变化,但是在系统中,该对象所具有的接口,却表现出相对稳定的一致性(举例说来:比如系统使用的数据库因为需求变更,需要由原本使用的MySQL迁移到SQL Server上,这里数据库对象产生了根本性的变化,但是作为系统使用上来讲,对数据库的操作接口保持了稳定一致。工厂模式可有效的隔离对象的变化给系统代码所带来的影响。结构图如下:仍以上述的数据库对象的变化为例,给出说明代码。首先给出抽象Product类,对应到是我们例子中就是关于SQL抽象类:class ISql{public: virtual type Ope 阅读全文
posted @ 2012-05-28 16:42 CS106A 阅读(542) 评论(0) 推荐(0)