栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

设计模式读书笔记

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

设计模式读书笔记

希望通过记录一些关键点做到实际开发中能够得心应手。

状态模式

这个模式可能工作中会遇到,将可以互换的行为封装起来,然后使用委托的方法,决定使用哪一个行为,状态基转移场景

这种设计会大量新增状态类,对于一些复杂场景会非常管用;对一些简单场景,比如状态里面只有一个处理函数,状态基转换也比较简单,顺序递增,可能只需要封装函数即可。

int state = 0;
switch (state) {
    case 0:
        DoStateStart();
        break;
    case 1:
        DoStateProcess();
        break;
    case 2:
        DoStateStop();
        break;
    default:
        break;
}

void DoStateStart()
{
    ...
    state++;
}

void DoStateProcess()
{
    ...
    state++;
}

void DoStateStop()
{
    ...
    state = 0;
}
策略模式

定义算法族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。这也是“多用组合,少用继承”的设计原则,用HAS-A(有一个)代替IS-A(是一个)

继承:

组合: 

 

观察者模式

定义了对象只看的一对多依赖,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新

        观察者是否需要持有被观察者对象的实例?持有的话,由观察者调用被观察者的注册接口和取消注册接口,但是被观察者的生命周期需要关注和管理

        观察者通过notifyObserver接口通知被观察者,这是push,而不是被观察者来调用观察者的接口,这是pull。

装饰者模式

目的是想在原来的基类的基础上增加些功能,一种设计思想是通过继承的方式不断增加子类,而且需要不可避免的修改基类的函数,可能代码长这样

class Base
{
    virtual int Cost()
    {
        int cost = 0;
        if (HasTea()) {
            cost += 2;
        }

        if (HasMilk()) {
            cost += 3;
        }
    }

    virtual bool HasTea() = 0;
    virtual bool HasMilk() = 0;
}

class A : public Base
{
    virtual bool HasTea() {return false;}
}

class B : public Base
{
    virtual bool HasMilk() {return true;}
}

这种设计违反了设计原则:开放-关闭原则,类应该对扩展开放,对修改关闭 。也就是基类在稳定之后尽可能不要再修改

装饰者和被装饰者应该具有相同的基类,或者装饰者要继承被装饰者,这样做的目的是为了在使用被装饰者的地方可以使用装饰者替代;这里使用继承的目的仅此而已;装饰者内部需要引用被装饰者,装饰者可以在所委托被装饰者的行为之前或之后,加上自己的行为,以打到特定的目的。装饰者定义;我们平时使用I/O相关类使用的就是装饰者设计模式

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/938494.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号