1.设计模式——观察者模式
2.装饰器模式与代理模式区别
3.设计模式(c++)笔记之八(Decorator模式)
4.设计模式(c++)笔记之一(Factory Method工厂方法模式)
5.2019年你的设计设计书单有什么书?
设计模式——观察者模式
观察者模式,或称发布/订阅模式,模式模式是禅之禅一种典型的设计模式,以事件监听为核心,源码建立对象间的第版多对一依赖关系。当一个对象状态发生变化时,设计设计idea配置本地源码所有与其关联的模式模式观察者会即时接收到通知并自动更新。这种模式的禅之禅优势在于,它简化了对象间的源码通信,使得维护复杂系统更易于管理。第版然而,设计设计需要权衡开发和运行效率,模式模式通常会选择异步处理方式来提高性能。禅之禅
一个生动的源码比喻是战国时期的秦相李斯,为了监控韩非子,第版他通过安排间谍在韩非子周围,以此来实时获取动态信息。在实际编程中,你可以创建一个被观察者接口,如“韩非子”角色,其行为变化触发观察者(如“李斯的间谍”)更新。观察者接口和实现类则定义了观察者如何订阅和通知被观察者。
通过观察者模式,librtmp源码使用你可以构建出一个清晰的系统结构,如UML图所示。被观察者接口与实现类独立,而入口类则负责管理观察者与被观察者之间的关系。深入学习《设计模式之禅》——秦小波的著作,能更好地理解和应用观察者模式在实际项目中的实践。
装饰器模式与代理模式区别
在设计模式的世界里,装饰器和代理模式各自扮演着不同的角色。装饰器模式,如同《设计模式之禅》所述,它的核心是“灵活地给对象添加额外职责”,而无需生成新的子类。装饰器的类图揭示了其独特性:装饰类独立于目标对象,调用方拥有对目标对象引用的控制权,这使得功能扩展变得轻而易举,一个装饰器可以适用于多个目标类。
相比之下,代理模式的核心是“控制对目标对象的访问”。在代理模式中,代理对象直接管理着目标对象,这与装饰者模式中的解耦方式截然不同。代理模式的随心行源码灵活性较低,因为代理类通常预设了代理的具体目标类,扩展性较差。
来看一个具体的例子:想象一下,我们有Game接口,代表基础的游戏类。接着,有一个基础的游戏类,这就是目标类。装饰器类则用于增加额外的功能,而代理模式中,我们有一个独立的类作为代理,它固定地关联着某个特定的游戏类。最后,调用类在使用时,是通过代理间接操作游戏,而非直接操作目标类。
运行这些类,我们可以看到装饰器模式如何动态地添加功能,而代理模式如何控制访问。两种模式在控制对象引用和功能扩展的灵活性上有着显著的差别。
设计模式(c++)笔记之八(Decorator模式)
在C++的设计模式中,Decorator模式是dialog组件源码一种动态地为对象添加额外职责的灵活方法,尤其在需要在OO设计中添加新功能时,它相较于继承方式更具优势。其核心在于,通过组合而非继承来扩展类的行为,允许通过一个公共基类(如ConcreteComponent和Decorator的共同父类)实现多态,即使有多个ConcreteComponent类型,也只需一个Decorator类即可处理。装饰模式的关键在于其灵活性和扩展性,不局限在特定的组件上。
举个例子,想象一下小学时的我,成绩不佳经常垫底,但通过装饰成绩单的方式,我巧妙地提高了老爸对我成绩的评价。首先,我强调了每个科目的最高分(尽管实际分数较低),使他认为我接近最高水平。其次,我通过隐藏退学同学的信息,虚报了班级排名,让成绩单显得更具说服力。这个过程可以用Decorator模式来类比,pdf页面源码通过装饰器类(如HighScoreDecorator和SortDecorator)来包装原始成绩单(ISchoolReport和CFourthGradeSchoolReport),实现了对原始信息的增删改,达到了我想要的效果。
在代码实现上,包括定义接口(ISchoolReport)、具体成绩单类(CFourthGradeSchoolReport),以及各种装饰器类(如ReportDecorator、HighScoreDecorator和SortDecorator),每个装饰器都包含一个指向ISchoolReport的私有变量。在主程序main.cpp中,通过这些装饰器对成绩单进行操作,最终得到美化过的成绩单。这些实例充分展示了Decorator模式在实际问题中的应用。
深入了解这种模式,可以参考《设计模式之禅》和《GoF_种设计模式解析》等书籍。
设计模式(c++)笔记之一(Factory Method工厂方法模式)
工厂方法模式的意义在于定义一个创建产品对象的工厂接口,并推迟实际创建工作至子类中。核心工厂类不再负责产品的创建,转而成为抽象工厂角色,仅负责具体工厂子类必须实现的接口。这种抽象化的好处是使得系统在不修改具体工厂角色的情况下,可以引进新的产品。
通常使用Factory模式来解决问题。在第一个问题中,我们经常声明一个创建对象的接口,并封装对象的创建过程。Factory在此类似于一个真正意义上的工厂。在第二个问题中,我们需要提供一个对象创建对象的接口,并在子类中提供具体实现,因为只有在子类中才能决定实例化哪一个类。
第一种情况的Factory结构示意图为图1。所以的Factory模式经常在系统开发中使用,但这并非Factory模式的最大威力所在。Factory模式不仅提供了创建对象的接口,更重要的是延迟了子类的实例化。以下是这种情况的一个Factory结构示意图:图2。Factory模式的应用并非只是为了封装对象的创建,而是要把对象的创建放到子类中实现:Factory中只是提供了对象创建的接口,其实现将放在Factory的子类ConcreteFactory中进行。这是图2和图1的区别所在。
实例描述:女娲补天的故事大家都听说过吧,今天不说这个,说女娲创造人的故事。女娲在补了天后,下到凡间一看,哇塞,风景太优美了,天空是湛蓝的,水是清澈的,空气是清新的,太美丽了,然后就待时间长了就有点寂寞了,没有动物,这些看的到都是静态的东西呀,怎么办?别忘了是神仙呀,没有办不到的事情,于是女娲就架起了八卦炉(技术术语:建立工厂)开始创建人,具体过程是这样的:先是泥巴捏,然后放八卦炉里烤,再扔到地上成长,但是意外总是会产生的:第一次烤泥人,兹兹兹兹~~,感觉应该熟了,往地上一扔,biu~,一个白人诞生了,没烤熟!第二次烤泥人,兹兹兹兹兹兹兹兹~~,上次都没烤熟,这次多烤会儿,往地上一扔,嘿,熟过头了,黑人哪!第三次烤泥人,兹~兹~兹~,一边烤一边看着,嘿,正正好,Perfect!优品,**人类!这个过程还是比较有意思的,先看看类图:
我的工程目录:
注释:main(),女娲 IHuman,产品接口 CYellowHuman,产品之一 CWhiteHuman,产品之二 CBlackHuman,产品之三 IHumanFactory,工厂接口 CYellowHumanFactory,工厂之一 CWhiteHumanFactory,工厂之二 CBlackHumanFactory,工厂之三
产品接口类IHuman IHuman.h
黄种人类YellowHuman YellowHuman.h
YellowHuman.cpp
白种人类WhiteHuman WhiteHuman.h
WhiteHuman.cpp
黑种人BlackHuman BlackHuman.h
BlackHuman.cpp
工厂接口IHumanFactory IHumanFactory.h
创造黄种人工厂类YellowHumanFactory YellowHumanFactory.h
YellowHumanFactory.cpp
创造白种人工厂类WhiteHumanFactory.h WhiteHumanFactory.h
WhiteHumanFactory.cpp
创造黑种人工厂类BlackHumanFactory BlackHumanFactory.h
BlackHumanFactory.cpp
主类main.cpp
结果如下:
参考文献:《设计模式之禅》,《GoF_种设计模式解析》
年你的书单有什么书?
年的书单规划,主要分为三类:技术、互联网产品与运营、通识。技术类方面,重点是掌握Python编程语言,学习数据分析与网络爬虫技巧,同时增加计算机基础知识。互联网产品与运营类,目的在于了解各种方法模式,提升专业视野。通识类旨在拓宽知识面,加深对世界的认知。
技术类推荐书目有:《怪诞行为学》、《设计心理学》、《科学学习:斯坦福黄金学习法则》、《万万没想到:用理工科思维理解世界》。这些书籍不仅有助于编程技能的提升,还能激发对科技和学习方法的新思考。
互联网产品与运营类推荐:《设计模式之禅》、《原则》。学习设计背后的思维逻辑,以及构建原则对实际工作的影响,为产品创新与运营策略提供理论支撑。
通识类推荐:《未来简史:从智人到智神》。这本书提供了一种宏大的历史视角,探讨人类文明的未来发展,激发对科技、社会与人类未来的深度思考。
在阅读过程中,认识到不少行业知识可能存在误解,也可能遗漏了一些重要书籍。希望有经验的读者能给出宝贵建议,分享个人的阅读体会和推荐,帮助我以及更多寻求知识的朋友们,共同进步。