学习笔记: 设计模式专训之装饰器、代理、观察者
1 创建型设计模式
2 结构型设计模式
3 行为型设计模式
1. 创建型设计模式:关注对象的创建
单例模式:把对象的创建权限关闭,提供一个公开的静态方法,起到对象重用
原型模式:把对象的创建权限关闭,提供一个公开的静态方法,提供全新的对象,不是走的构造函数
注意的地方: 单例模式的 懒汉,饿汉模式
原型模式: 调用的object 的MemberwiseClone 方法进行浅拷贝
Object 的浅表副本[MSDN]
如果需要深拷贝 代码怎么写
C#深拷贝与浅拷贝
2. 结构型设计模式
(1) 适配器模式 应用场景
举个例子: 老项目中已经封装好了 常用的sql接口
业务需要使用redis(三方提供的 openstack 或 servicestack),但是对外暴露的还是一个IHelpr接口, 怎么搞?
1. 继承方式 侵入性特别强
class RedisHelperClass : RedisHelper, IHelper
2. 组合方式
(2) 代理模式 举个常见的应用场景, 火车站买票, 没有代理=>需要跑到火车站询问有没有票, 再购买 , 有代理=> 直接让代理去买, 不用操心 有没有票 等内部实际业务流程
这里 火车站买票 好比别人封装好的类库, 比如业务需要在 它的咨询票逻辑中加 日记记录 , 我们是修改不了别人的dll的 所以只能包一层. 就是 代理类 使用代理类的好处就是: 封装真是业务逻辑, 调用者不用关心 具体实现, 就像买房, 中介公司 帮我们做了 与房东打交道, 与政府打交道等等操作, 我们只需调用 中介.买房 方法就好了. 不关心具体实现. 远程代理 如 wcf 都是代理模式的应用体现 ,帮我们封装了复杂的远程调用逻辑 简单代码实现 如下:
(3)装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。
一个更易理解的实例:
装饰模式为已有类动态附加额外的功能就像LOL、王者荣耀等类Dota游戏中,英雄升级一样。每次英雄升级都会附加一个额外技能点学习技能。具体的英雄就是ConcreteComponent,技能栏就是装饰器Decorator,每个技能就是ConcreteDecorator;
具体代码实现 菜鸟教程的实现 在最下面