学习笔记: 设计模式专训之装饰器、代理、观察者

1 创建型设计模式
2 结构型设计模式
3 行为型设计模式


1. 创建型设计模式:关注对象的创建
单例模式:把对象的创建权限关闭,提供一个公开的静态方法,起到对象重用
原型模式:把对象的创建权限关闭,提供一个公开的静态方法,提供全新的对象,不是走的构造函数

注意的地方:  单例模式的 懒汉,饿汉模式

原型模式:  调用的object 的MemberwiseClone 方法进行浅拷贝

Object 的浅表副本[MSDN]

如果需要深拷贝 代码怎么写

C#深拷贝与浅拷贝

image


2. 结构型设计模式

(1) 适配器模式 应用场景

举个例子:  老项目中已经封装好了 常用的sql接口

image

业务需要使用redis(三方提供的  openstack 或 servicestack),但是对外暴露的还是一个IHelpr接口, 怎么搞?

1. 继承方式 侵入性特别强

          class RedisHelperClass : RedisHelper, IHelper

image

2. 组合方式

image


(2) 代理模式 举个常见的应用场景, 火车站买票, 没有代理=>需要跑到火车站询问有没有票, 再购买 , 有代理=> 直接让代理去买, 不用操心 有没有票 等内部实际业务流程

这里 火车站买票 好比别人封装好的类库, 比如业务需要在 它的咨询票逻辑中加 日记记录 , 我们是修改不了别人的dll的 所以只能包一层. 就是 代理类 使用代理类的好处就是: 封装真是业务逻辑, 调用者不用关心 具体实现, 就像买房, 中介公司 帮我们做了 与房东打交道, 与政府打交道等等操作, 我们只需调用 中介.买房 方法就好了. 不关心具体实现. 远程代理 如 wcf 都是代理模式的应用体现 ,帮我们封装了复杂的远程调用逻辑 简单代码实现 如下:

image

(3)装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。

一个更易理解的实例:

装饰模式为已有类动态附加额外的功能就像LOL、王者荣耀等类Dota游戏中,英雄升级一样。每次英雄升级都会附加一个额外技能点学习技能。具体的英雄就是ConcreteComponent,技能栏就是装饰器Decorator,每个技能就是ConcreteDecorator;

具体代码实现  菜鸟教程的实现  在最下面

原文地址:https://www.cnblogs.com/xtxtx/p/9248592.html