经典设计模式的应用场景及类图设计

1.工厂模式

1.工厂模式的定义

工厂模式定义一个用于创建对象的接口,让子类决定实例化哪一个类。
具体关于工厂模式的介绍请点击右侧链接看我的博客工厂模式

2.工厂模式的应用场景

案例:现需要设计一个程序来读取多种不同类型的图片格式,针对每一种图片格式都设计一个图片读取器(ImageReader),如GIF图片读取器(GifReader)用于读取GIF格式的图片、JPG图片读取器(JpgReader)用于读取JPG格式的图片。图片读取器对象通过图片读取器工厂ImageReaderFactory来创建,ImageReaderFactory是一个接口,用于定义创建图片读取器的工厂方法,其子类GifReaderFactory和JpgReaderFactory用于创建具体的图片读取器对象。使用工厂方法模式实现该程序的设计。

3.案例类图设计

在这里插入图片描述

2.策略模式

1.策略模式的定义

策略模式定义一系列算法,把它们一个个封装起来,并且使它们可以相互替换。本模式使得算法可独立于使用它的客户而变化。
具体关于策略模式的介绍请点击右侧查看我的博客策略模式

2.策略模式的应用场景

某系统需要对重要数据(如用户密码)进行加密,并提供了几种加密方案(如MD5加密、DES加密等),对该加密模块进行设计,使得用户可以动态选择加密方式。

3.案例类图设计

在这里插入图片描述

3.状态模式

1.状态模式的定义

状态模式允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。
具体关于状态模式的介绍请点击右侧查看我的博客状态模式

2.状态模式的应用场景

一个使用弹夹大小为3颗的手枪通过更换弹夹重新获取子弹。使用子弹大小为3颗子弹的手枪一共有4中状态:有三颗子弹,有两颗子弹,有一颗子弹,没有子弹。手枪只有在有子弹的状态下可以调用fire()方法进行射击,只有在没有子弹的情况下可以调用LoadBullet()方法转载新弹夹获得子弹。需要注意的是,手枪调用fire()方法和LoadBullet()都会导致手枪的状态发生变换。具体的状态转换图如下所示:
在这里插入图片描述

3.案例类图设计

在这里插入图片描述
注意:策略模式和状态模式在类图结构上大同小异,但是二者也有着本质的区别,策略模式强调用户根据自己的需求手动选择并设置相应的策略,而状态模式则强调状态随事件发生而逐渐变化。

4.组合模式

1.组合模式的定义

组合模式将对象组合成树形结构以表示“部分-整体”的层次结构。Composite使用户对单个对象和组合对象的使用具有一致性。
具体关于组合模式的介绍请右击链接查看我的博客组合模式

2.组合模式的应用场景

一颗苹果树的主干上有2个分支,一个分支上结了10个苹果,另一个分支上结了8个苹果,苹果每斤4元钱。请计算这棵苹果树的重量。(一个主干768kg,每个分支30kg,而每一个苹果都是0.5kg)。
苹果树的结构如下图所示:
在这里插入图片描述
注意:如果对象之间的关系有着明显的层次关系,及可以表示为树形结构,则可以优先考虑组合模式。

3.案例类图设计

在这里插入图片描述

5.装饰模式

1.装饰模式的定义

动态地给对象添加一些额外的职责。就功能来说装饰模式相比生成子类更为灵活。
具体关于装饰模式的介绍可以右击链接查看我的博客装饰模式

2.装饰模式的应用场景

当前系统已有一个抽象类ReadWord,该类有一个抽象方法readWord(),另外,系统还有一个ReadWord类子类ReadEnglishWord,该类的readWord()方法可以读者一个有英文单词构成的文本文件word.txt。
现在有部分用户希望使用ReadWord类的对象调用readWord()方法读者文件word.txt中的单词,并希望同时能够得到该单词的汉语解释,也有一些用户希望不仅能得到该单词的汉语意思也能得到该单词的英语例句,而其他用户没有提出任何要求。

3.案例类图设计

在这里插入图片描述

6.观察者模式

1.观察者模式的定义

定义对象间的一种一对多的依赖关系,但一个对象的状态发生变化时,所以依赖它的对象都得到通知并被自动更新。
具体关于观察者模式的介绍请右击链接查看我的博客观察者模式

2.观察者模式的应用场景

有一个大学毕业生和一个归国留学生都希望能及时知道求职中心最新的职业需求信息。

3.案例类图设计

很明显大学毕业生和归国留学生都是观察者,而求职中心则是具体主题;
在这里插入图片描述
本次案例中,使用的是观察者模式中的推数据,即具体主题将变化后的数据全部交给具体观察者。
而有的观察者模式采用的是拉数据方式,即具体主题不将变化后的参数交给具体观察者,而是提供了获得这些参数的方法,具体观察者在得到通知后,可以调用具体主题提供的方法得到数据,但需要自行判断数据是否发生了变化。

7.代理模式

1.代理模式的定义

代理模式为其他对象提供一种代理以控制对这个对象的访问。
具体关于代理模式的介绍请右击链接查看我的博客代理模式

2.代理模式的应用场景

X 程序员在公司上班时,遇见了公司拖欠工资甚至克扣工资的情况,这种情况下 X 程序员还是通过法律途径来解决问题,这个时候就需要请一个律师来作为自己的诉讼代理人。具体类图设计如下所示

3.案例类图设计

在这里插入图片描述

8.模板方法模式

1.模板方法模式的定义

定义一个操作中算法的骨架,而将一些步骤延迟到子类中。模板方法使子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。
具体关于模板方法模式的介绍可以右击查看我的博客模板方法模式

2.模板方法模式的应用场景

JDBC是Java运行平台核心类库中的一部分,提供访问数据库API,它由一些Java类和借口组成。在Java中可以使用JDBC实现对数据库中表记录的查询,修改,删除。
而JDBC无论采用何种数据库连接,连接数据库的步骤都是一样的,经常有如下顺序的操作:
1.加载访问数据库的驱动程序;
2.与一个数据库建立连接;
3.向已连接的数据库发送SQL语句;
4.处理SQL查询语句返回结果。

3.案例类图设计

在这里插入图片描述

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

散一世繁华,颠半世琉璃

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值