![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
IT人Key
一个文艺IT男
展开
-
设计模式之(Abstract Factory)抽象工厂
1. 需求: 设计一个电脑组装程序,用于组装品牌电脑。组装所用的配件(主板、硬盘、显示器)全部由品牌提供。比如组装一台联想的电脑,则主板、硬盘和显示全部由联想提供。(目前只有Lenovo和Dell两种品牌) 2. 分析 所有品牌的电脑组装流程都一样,不同的各家品牌有自己专用的配件,所以组装流程应该和获取配件两部分隔离开来。 3. 类图 抽象工厂模式主要用于创原创 2014-11-18 20:55:31 · 1174 阅读 · 1 评论 -
设计模式之(Proxy)代理模式
1. 类图 2. 总结 代理模式包装一个对象,并为该对象提供一种访问控制。代理模式可应用于包装远程访问的对象(网络),客户调用代理访问远程对象就像访问本地对象一样,客户甚至都不知道远程对象的存在。代理模式还常用于包装开销比较大的对象,当客户端访问的创建时间比较长的对象时,代理首先构建一个“假”的对象,立即访问,然后再慢慢创建真实的对象。代理模式还可以用于控制对像的访问原创 2014-11-30 17:23:19 · 835 阅读 · 0 评论 -
设计模式之(State)状态模式
1. 类图 2. 总结 状态模式允许对象在内部状态改变时改变它的行为,对象看起来好像修改了他的类。原创 2014-11-30 16:31:21 · 806 阅读 · 0 评论 -
设计模式之(Facade)外观模式
1. 需求 要设计一个家庭媒体中心程序,可以连接DVD,电视(TV)和功放(Sounder),连接好之后,可以一键看电影,一键听音乐。(不用媒体中心的话看电影需要依次打开DVD,TV和Sounder)。 2. 分析 我们需要将实现细节封装起来,只暴露出来最简单的接口给客户程序,比如说WatchMovie和ListenMusic。 3. 类图 4. 总结原创 2014-11-22 10:51:46 · 653 阅读 · 0 评论 -
设计模式之(Composite)组合模式
1.类图 2. 总结 当有数个对象集合,且对象之间有"整体/部分"关系时(多数为树形结构,某些节点保护子节点,某些节点没有子节点(叶子)),客户端希望用透明的方式使用所有节点时,可以使用Composite(组合)模式。MFC中窗口的组合就使用的是组合模式,一个窗口可以包含很多子窗口,而客户端可以调用统一的方法处理所有窗口,比如说隐藏窗口。原创 2014-11-26 21:41:43 · 729 阅读 · 0 评论 -
设计模式之(Iterator)迭代器模式
1. 类图 2. 总结 迭代器模式用于客户端程序用统一的方式遍历各种数据集合,而不需要知道数据集合的实现,同时可以自由扩充数据集合。每一种数据集合都需要单独实现一个针对与自身类型的迭代器。原创 2014-11-26 21:25:25 · 696 阅读 · 0 评论 -
设计模式之(Observer)观察者模式
需求: 有一个报社,用户可以随时订阅报纸,也可以随时取消订阅。当每天的新闻来的时候,报社用邮递员投递给订阅了报纸的用户。订阅者有老人、小孩和青年。 分析: 报社相当于被观察的对象,用户相当于观察者,一旦新闻有更新,报社就通知所有观察者。 类图: 扩展: 该类图使用的是“推”的方式将新闻推送给订阅者。还可以使用一种的“拉原创 2014-11-16 08:21:02 · 677 阅读 · 0 评论 -
设计模式之(Strategy)策略模式
需求: 我们需要设计一种动作游戏。游戏有个法师和战士两种角色,角色以后还可能会增加,比如说修行者之类的。法师和战士可以装备不同的武器和外套,武器目前有枪和迫击炮两种,外套有隐形外套和普通外套两种。武器和外套以后也可能随时增加。 设计分析: 在系统中我们看到有三种变化的需求,一是角色,二是武器,三是外套。同时角色有一些共同的行为,都可以跑,而且都必须装备武器和外套。我们将采用策略原创 2014-11-16 08:20:15 · 751 阅读 · 0 评论 -
设计模式之(Command)命令行模式
1.需求 为一个开关设计程序,这个开关有N按钮,同时对应N个插槽,要求可以接入任何电器厂商的API,从而可以控制任何电器。目前只有电灯和电视两种电器,要求写一个Demo程序,按钮1可以打开电灯。按钮2可以打开电视并且切换到上一次打开的频道。打开电视换频道需要打开机顶盒并且对机顶盒切换频道。 2. 分析 每个厂商的API不一致,且每个电器的打开流程都不一样,我们需要将这些差异封装原创 2014-11-20 20:32:32 · 778 阅读 · 0 评论 -
设计模式之(Decorator)装饰者模式
1.需求 设计一个计算一块手机价格的程序,不同的存储容量(16GB和32GB)价格不同,不同的颜色(白色和黑色)价格不同,不同的网络制式(联通和电信)价格不同。当用户选定好配置后,程序计算其价格。 2.分析 考虑到未来存储容量可能升级到64GB,网络制式可能增加移动或者其他运营商,颜色可能增加更多的颜色,所以我们需要一种弹性的设计,可以自由添加存储容量,颜色和制式,同时程序原创 2014-11-17 20:50:21 · 672 阅读 · 0 评论 -
设计模式之(Singleton)单例模式的几种实现
第一种:低效率实现 这种实现方法,优点是实现简单,缺点是在多线程频繁访问下效率比较低,经常出现锁竞争。适应于不需要频繁访问实例的情况下。 class Singleton{public: static Singleton* GetInstance() { AutoLock lock(mutex); if (!原创 2014-11-19 20:45:59 · 671 阅读 · 0 评论 -
设计模式之(Template Method)模版方法模式
1. 需求: 设计一个水果榨汁机程序,该程序可以完成橘子、苹果等水果的榨汁,而且该水果榨汁机还可以完成水果削皮和去核。 2. 分析: 不同水果的榨汁流程是一样的,都是先把水果准备好,然后搅碎,然后再把汁液漏出。但是不同水果的准备过程不一样,橘子只需要剥皮,而苹果需要先削皮,然后去核。所以我们可以将不同水果的准备过程封隔离开来,将榨汁流程封装在一起。 3. 类图:原创 2014-11-24 20:18:36 · 722 阅读 · 0 评论