大话设计模式读书心得


前言

本文记录自己学习大话设计模式心得,欢迎留言讨论。


一、简单工厂模式

想下怎么实现一个计算器?

  • UI功能要区别开
  • 在不改变原来代码的情况下实现增加功能
    注:用户会出入数字和操作符
    思路:将操作抽象成一个基础类Operation,包含两个成员变量,和一个获取结果的虚函数,加减乘除都继承这个类;
    增加一个工厂,管理所有的子类生成,
    在这里插入图片描述
    最后的实现代码
    在这里插入图片描述

二、策略工厂模式

思考下商场打折策略怎么写代码?要求支持各种策略,同时思考扩展性。
简单工厂有个问题,就是在用户界面暴露工厂和算法基类两个类。策略模式可以用相同的方式调用所有的算法,减少算法间的耦合(我认为这点和工厂一样的),在策略层可以定义一些可供重用的算法或行为,其实就是定义个算法的基类,子类重写一部分通用的函数,达到最后完成相同功能(计算),不同的实现策略的目的。像书中说的,策略封装了变化,封装了几乎任何类型的规则,“只要在分析过程中听到需要在不同时间应用不同的业务规则, 就可以考虑使用策略模式处理这种变化的可能性”。

在这里插入图片描述
在这里插入图片描述

三、单一职责原则

思考下俄罗斯方块如何实现

  • 游戏逻辑如何实现(假设画面就是一个30*40的格子,那么怎么判断方块能否下移,左右移动?怎么实现消层?)
  • UI界面刷新绘制
    本章旨在分析程序,要把相同功能的代码聚合封装成一个类,有交互的程序至少具有交互界面和后台实现两个大类(其实可以具体划分很多,比如俄罗斯方块,前端除了UI界面渲染绘制,还可以有用户控制输入)

四、开放-封闭原则

想象下如何保证公司营收的情况下,制定上班迟到的管理规则,是不是应该维护核心利益,解决主要矛盾的情况下,尽可能开放啊。

  • 保证代码核心功能的前提下,尽可能去抽象频繁变化的部分,以应付未来可能发生的变化(刻意抽象每个部分也不对)。
  • 尽早想办法应对那些发生更大变化的可能

五、依赖倒转原则

想象下组装电脑,为什么一个主板可以选择不同的内存条、CPU、显卡呢?因为彼此约定好了接口,可以互相独立生产,组装就能配合使用。
“依赖倒转原则其实就是谁也不要依靠谁,除了约定的接口,大家都可以灵活自如”
举个例子,就是企鹅不应该直接继承鸟,因为鸟会飞的特点企鹅是不具备的,只有子类能完全替换调父类的情况下(LSP原则),继承扩展才有价值。所以最好的是两者都分别继承动物接口。

六、装饰模式

思考下如何写一个程序,表示给人穿衣服?要求能有不同的搭配,同时需要避免内裤外穿的情况。
不影响基础类(人)的核心职责,而把装饰的功能从类中搬移出去,简化原有的基础类;客户代码在运行时需要选择地、按顺序使用某些功能;同时去除了相关类的装饰逻辑(同样穿运动鞋,穿polo衫可以穿,穿健身衣也可以穿)

在这里插入图片描述
在这里插入图片描述

七、代理模式

设想下小明喜欢小红,让小张代理送花送巧克力,对小红来说,还不认识小明。代码如何实现?
在这里插入图片描述
代理和实际执行者都实现接口,代理实现接口中,调用实际执行者同名函数。
对开发来说,常见遇到的是智能引用,使用代理来管理对象的引用计数,当对象没有引用的时候,可自动释放,也就是“通过代理在访问一个对象时附加一些内务处理。”
实际中比较经典的应用,客户端程序调用代理解决远程访问问题。

十七、适配器模式

试想下要写一个网络请求的类提供给客户,客户拿到后只需要发送post或者get,配合要求的Json参数就可以访问我的服务器。那么我要怎么做呢?不妨提供一个适配器基类包含post和get函数,然后子类实现中包含一个成员变量,指向具体的网络访问实现类,这部分用户是看不到的。用户使用的时候只需要访问提供的post和get函数,里面的信息转换交给子类去实现,这就是适配器。
在这里插入图片描述
部分代码:
在这里插入图片描述
其实到这里的时候,我已经有问题了,因为我是看完代理模式直接看适配器模式,心中不免有疑惑,两者

总结

  • 11
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值