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;

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

  • 相关阅读:
    [CSP-S模拟测试]:Merchant(二分答案)
    [CSP-S模拟测试]:回文(hash+二维前缀和)
    [CSP-S模拟测试]:排列组合(数学 or 找规律)
    [CSP-S模拟测试]:X国的军队(贪心)
    BZOJ3714 [PA2014]Kuglarz 【最小生成树】
    BZOJ3922 Karin的弹幕 【线段树】
    BZOJ3495 PA2010 Riddle 【2-sat】
    BZOJ2597 [Wc2007]剪刀石头布 【费用流】
    hdu6184 Counting Stars 【三元环计数】
    BZOJ4815 [CQOI2017]小Q的表格 【数论 + 分块】
  • 原文地址:https://www.cnblogs.com/xtxtx/p/9248592.html
Copyright © 2011-2022 走看看