天天看点

一文掌握14个高大尚设计模式的适用场景(图例)!!!------1

代码地址在文末

1 工厂方法模式

有一个OEM制造商代理做HP笔记本电脑(Laptop),后来该制造商得到了更多的品牌笔记本电脑的订单Acer,Lenovo,Dell,该OEM商发现,如果一次同时做很多个牌子的本本,有些不利于管理。利用工厂模式改善设计,用JAVA语言实现 (或C#控制台应用程序实现)该OEM制造商的工厂模式。绘制该模式的UML图。

一文掌握14个高大尚设计模式的适用场景(图例)!!!------1

工厂方法模式的适用性如下:

  • 当一个类不知道它所需要的对象的类时,在工厂方法模式中,客户端不需要知道具体产品类的类名,只需要知道所对应的工厂即可;
  • 当一个类希望通过其子类来指定创建对象时,在工厂方法模式中,对于抽象工厂类只需要提供一个创建产品的接口,而由其子类来确定具体要创建的对象,利用面向对象的多态性和里氏代换原则,在程序运行时,子类对象将覆盖父类对象,从而使得系统更容易扩展。
  • 将创建对象的任务委托给多个工厂子类中的某一个,客户端在使用时可以无须关心是哪一个工厂子类创建产品子类,需要时再动态指定,可将具体工厂类的类名存储在配置文件或数据库中。

2 抽象工厂模式

麦当劳(McDonalds)和肯德基(KFC)快餐店都经营汉堡(Hamburg)和可乐(Cole),用JAVA语言实现(C#控制台应用程序实现)这两个快餐店经营产品的抽象工厂模式。绘制该模式的UML图。

一文掌握14个高大尚设计模式的适用场景(图例)!!!------1

抽象工厂模式主要适用于以下情况:

• 一系列要独立于它的产品的创建、组合和表示时。

• 一个系统要由多个产品系列中的一个来配置时。

• 当要强调一系列相关的产品对象的设计以便进行联合使用时。

• 当要提供一个产品类库,而只要显示它们的接口而不是实现时。

3 建造者模式

实例:KFC套餐

建造者模式可以用于描述KFC如何创建套餐:套餐是一个复杂对象,它一般包含主食(如汉堡、鸡肉卷等)和饮料(如果汁、可乐等)等组成部分,不同的套餐有不同的组成部分,而KFC的服务员可以根据顾客的要求,一步一步装配这些组成部分,构造一份完整的套餐,然后返回给顾客。利用建造者模式设计,用JAVA语言实现 (或C#控制台应用程序实现)。绘制该模式的UML图。

一文掌握14个高大尚设计模式的适用场景(图例)!!!------1

建造者模式主要适用于以下应用场景:

  • 相同的方法,不同的执行顺序,产生不同的结果。
  • 多个部件或零件,都可以装配到一个对象中,但是产生的结果又不相同。
  • 产品类非常复杂,或者产品类中不同的调用顺序产生不同的作用。
  • 初始化一个对象特别复杂,参数多,而且很多参数都具有默认值。

4 单例模式

在操作系统中,打印池(Print Spooler)是一个用于管理打印任务的应用程序,通过打印池用户可以删除、中止或者改变打印任务的优先级,在一个系统中只允许运行一个打印池对象,如果重复创建打印池则抛出异常。现使用单例模式来模拟实现打印池的设计。用JAVA语言实现(C#控制台应用程序实现)该模式。绘制该模式的UML图。

一文掌握14个高大尚设计模式的适用场景(图例)!!!------1

单例模式的应用场景:

  • 整个程序的运行中只允许有一个类的实例;
  • 需要频繁实例化然后销毁的对象。
  • 创建对象时耗时过多或者耗资源过多,但又经常用到的对象。
  • 方便资源相互通信的环境

5 组合模式

在水果盘(Plate)中有一些水果,如苹果(Apple)、香蕉(Banana)、梨子(Pear),当然大水果盘中还可以有小水果盘,现需要对盘中的水果进行遍历(吃),当然如果对一个水果盘执行“吃”方法,实际上就是吃其中的水果。使用组合模式模拟该场景。

利用组合者模式设计,用JAVA语言实现 (或C#控制台应用程序实现)。绘制该模式的UML图。

一文掌握14个高大尚设计模式的适用场景(图例)!!!------1

组合模式的适用性如下:

• 你想表示对象的部分-整体层次结构。

• 你希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。

6 适配器模式

加密适配器

某系统需要提供一个加密模块,将用户信息(如密码等机密信息)加密之后再存储在数据库中,系统已经定义好了数据库操作类。为了提高开发效率,现需要重用已有的加密算法,这些算法封装在一些由第三方提供的类中,有些甚至没有源代码。使用适配器模式设计该加密模块,实现在不修改现有类的基础上重用第三方加密方法。

现使用适配器模式来模拟实现以上的设计。用JAVA语言实现(C#控制台应用程序实现)该模式。绘制该模式的UML图。

一文掌握14个高大尚设计模式的适用场景(图例)!!!------1

适配器模式的适用性如下:

• 当系统想要使用现有的类,但是现有的类的接口不符合系统的需要时。

• 当需要通过创建一个可复用的类,使用本来的接口不相容并且无关的类结合在一起工作时。

• 在设计需要改变多个子类接口,在作用相同但名称不同的类或方法之间进行适配。

7 外观模式

电源总开关

现在考察一个电源总开关的例子,以便进一步说明外观模式。为了使用方便,一个电源总开关可以控制四盏灯、一个风扇、一台空调和一台电视机的启动和关闭。通过该电源总开关可以同时控制上述所有电器设备,使用外观模式设计该系统。

用JAVA语言实现 (或C#控制台应用程序实现)。绘制该模式的UML图。

一文掌握14个高大尚设计模式的适用场景(图例)!!!------1

外观模式的适用性如下:

  • 当要为访问一系列复杂的子系统提供一个简单入口时可以使用外观模式。
  • 客户端程序与多个子系统之间存在很大的依赖性。引入外观类可以将子系统与客户端解耦,从而提高子系统的独立性和可移植性。
  • 在层次化结构中,可以使用外观模式定义系统中每一层的入口,层与层之间不直接产生联系,而通过外观类建立联系,降低层之间的耦合度。

代码

https://gitee.com/rightstar/software-design-pattern

继续阅读