zoukankan      html  css  js  c++  java
  • 学习笔记: 设计模式专训之装饰器、代理、观察者

    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;

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

  • 相关阅读:
    HTML5超科幻个人主页
    用Java开发50个棋类游戏
    Android 4.2 project导入 5.0 SDK Eclipse 开发环境出现的问题总结
    蓝桥杯 地宫寻宝 带缓存的DFS
    HDU2577 How to Type【DP】
    Entity Framework 学习总结之一:ADO.NET 实体框架概述
    ASP.NET MVC4中调用WEB API的四个方法
    ASP.NET MVC Web API 学习笔记---第一个Web API程序
    ASP.Net MVC开发基础学习笔记(1):走向MVC模式
    MVC4笔记 Area区域
  • 原文地址:https://www.cnblogs.com/xtxtx/p/9248592.html
Copyright © 2011-2022 走看看