设计模式笔记

一、策略模式

策略模式可以说是一种相当常用的模式,其主要思路是:面向接口设计,尽可能保证方法的可扩展性。

派生类的同时,派生正确的方法,而不是重写已有的方法——可能导致已有实现的改变,这是我们不想看到的。

若类A中有一个方法fa(),而该方法fa()可能有多种实现,这些实现有些已知,而有些可能还要后续进行扩展,那么策略模式就是:将该方法fa()进行封装,得到接口类FA,然后再对FA进行派生,得到所需的类:FA_a、FA_b……,而这些类中是方法fa的已知的实现fa_a、fa_b……,这样在类A中包含一个接口类FA的实例后,对类A进行实例化时,可以动态选择方法fa()的实现。

要点包括:

  将对象的方法进行分类(按照可变/不变的属性),将不变的独立出来,作为基类中的方法;可变的方法抽象为接口,通过在基类中创建该方法的实例来对该方法进行调用,然后在基类的继承时,选择不同的接口来实现该方法多样性的同时,可以达到尽可能复用的目的。

注意:

  可变与不变不是固定的,需要按照当时需求认真分析,面对多变的需求要尽量多使用接口抽象,面对固定需求可以适当将实现放在基类。

  基类也有可能需要使用接口,当基类本身也具有多变性时,可以尝试将基类也设计成为接口。

二、观察者模式

观察者模式定义了一种对象之间的“一对多”的以来关系,这种关系是松耦合的,当一个对象的状态改变时,所有依赖于该对象的对象都会收到该状态改变的通知。(“发布者”与“订阅者”的关系。)

要点:

  首先,对于发布者来说,发布者需要包含一个订阅了该发布者的所有订阅者的列表,并包含一个可以让订阅者订阅和解除订阅该对象的方法,最重要的还要有一个通知状态改变的方法。

  其次,对于订阅者来说,发布者状态改变时,订阅者可以对于该变化有一个特有的动作(即方法)。

使用:

  在实现订阅者和发布者的接口后,若需要使用该模式,可分别对发布者和订阅者进行继承。

时间: 2024-08-28 08:06:30

设计模式笔记的相关文章

php设计模式笔记:单例模式

意图: 保证一个类仅有一个实例,并且提供一个全局访问点 单例模式有三个特点: 1.一个类只有一个实例2.它必须自行创建这个实例3.必须自行向整个系统提供这个实例 主要实现: Singleton定义了一个instance操作,允许外部访问它的唯一实例,instance是一个类方法,负责创建它的唯一实例. singleton适用场景: 1.当类只能有一个实例而且外部可以从一个公共的访问点访问它.2.当这个唯一实例应该是通过子类化可扩展的.并且用户应该无需更改代码就能使用一个扩展的实例时. Singl

Asp.net设计模式笔记之一:理解设计模式

GOF设计模式著作中的23种设计模式可以分成三组:创建型(Creational),结构型(Structural),行为型(Behavioral).下面来做详细的剖析. 创建型 创建型模式处理对象构造和引用.他们将对象实例的实例化责任从客户代码中抽象出来,从而让代码保持松散耦合,将创建复杂对象的责任放在一个地方,这遵循了单一责任原则和分离关注点原则. 下面是“创建型”分组中的模式: 1.Abstract Factory(抽象工厂)模式:提供一个接口来创建一组相关的对象. 2.Factory Met

设计模式----看大话设计模式笔记(二)

9.原型模式(Prototype): 用原型实例指定创建对象的种类,并通过拷贝这些原型创建行的对象. UML图: 原型模式其实就是从一个对象创建另一个可定制的对象,并且不需要知道任何创建的细节. .NET 中实现ICloneable接口即可. 一般在初始化信息不发生变化的情况下,克隆是最好的办法,隐藏了对象创建的细节,又提高了性能. MemberwiseClone()方法,如果字段是值类型,对该字段进行逐位复制:如果是引用类型,复制引用但是不复制引用的对象,因此原始对象及产生的副本引用同一对象.

(CZ深入浅出Java基础)设计模式笔记

一.面向对象思想设计原则 1.单一职责原则 其实就是开发人员经常说的"高内聚,低耦合",也就是说,每个类应该只有一个职责,对外只能提供一种功能,而引起类变化的原因应该只有一个.在设计模式中,所有的设计模式都遵循这一原则. 2.开闭原则 核心思想是:一个对象对扩展开放,对修改关闭.其实开闭原则的意思就是:对类的改动是通过增加代码进行的,而不是修改现有代码.也就是说软件开发人员一旦写出了可以运行的代码,就不应该去改动它,而是要保证它能一直运行下去,如何能够做到这一点呢?这就需要借助于抽象和

[设计模式] .NET设计模式笔记 - 了解设计模式

今天在TerryLee的cnblog(http://terrylee.cnblogs.com)里看到了与设计模式相关的整套文章,初学设计模式看完每篇文章后做些笔记和摘抄. ●什么是设计模式,什么是架构? 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于己于他人于系统都是多赢的:设计模式使代码编制真正工程化:设计模式是软件工程的基石脉络,如同大厦的

[设计模式] .NET设计模式笔记 - 有多少种设计模式

.NET下的23中设计模式. ※创建型模式篇 ●单件模式(Single Pattern) ●抽象工厂模式(Abstract Factory) ●建造者模式(Builder Pattern) ●工厂方法(Factory Method) ●原型模式(Protype Pattern) ※结构型模式篇 ●适配器模式(Adapter Pattern) ●桥接模式(Bridge Pattern) ●装饰模式(Decorator Pattern) ●组合模式(Composite Pattern) ●外观模式(

设计模式笔记(转)

本文转自:http://www.cnblogs.com/windlaughing/archive/2013/04/10/3013031.html 手头有一本设计模式,但是总是有闲事坚持不下去,转载了大神的笔记总结,下周坚持看完!!!!! 笔者所发表的设计模式系列的随笔一共包含15篇,归纳总结了<Head First 设计模式>一书中的内容.在这些随笔中,尽量用简洁.概括的语言说明每个模式的概念.特点.用法,并配以图片(类图.流程图)给读者一种直观.具体的印象.希望大家能有所收获. 1.策略模式

大话PHP设计模式笔记

针对PHP的设计模式进行总结记录. 顺带,我会在后面把我整理的一整套CSS3,PHP,MYSQL的开发的笔记打包放到百度云,有需要可以直接去百度云下载,这样以后你们开发就可以直接翻笔记不用百度搜那么麻烦了.  笔记链接:http://pan.baidu.com/s/1qYdQdKK 密码:pvj2   一.关于命名空间命名空间1.命名空间介绍2.命名空间使用 实例:test1.php文件代码: 1 2 3 4 5 6 7 <?php namespace Test1; function test(

php设计模式笔记--总结篇

一.引入  设计模式的一般定义不再说,只大概说一下我理解的设计模式,我理解的设计模式的主要目的是利用面向对象(类.接口等)特点,让代码更加易于扩展,易于重用,易于维护.这三个特点也就要求我们不要将太多功能积攒到一个类里面,而是分配到更多的类里面.所以,二十种乃至更多的设计模式主要是围绕上述四个目的进行设计的. php设计模式这一本书讲了19种设计模式,但其实有大部分设计模式思想上或者设计上是一样的思维与形式,我将在下面进行归类和总结,以便于大家更好地理解这本书,但大家最好看一下这本书,里面的使用

Asp.net设计模式笔记之二:应用程序分离与关注点分离

本次笔记主要涉及的内容如下: 1.将智能UI(SmartUI)反模式重构成分层方式的示例代码 2.分层设计与传统的Asp.net WebForm模型(代码后植)相比具有的优势 3.逻辑分层概念以及分离应用程序关注点 4.企业级Asp.net应用程序中各个不同层的责任 一.智能UI反模式 asp.net WebForm模型使得我们能够随意将控件拖放到设计页面上,然后进行代码书写.而其本身则使用代码后植技术,使得后台代码和前台代码分离开.后台代码包含了应用程序的所有事件处理,数据访问以及业务逻辑等,