七仔的博客

七仔的博客GithubPages分博

0%

六种设计模式结合的Java绘图板

Java绘图板使用的设计模式有:工厂模式、备忘录模式、单例模式、模板模式、迭代器模式、状态模式

六种设计模式结合的Java绘图板

部分截图:

主界面

保存文件

编辑颜色

功能实现:(截图在功能区)

  1. 用户可以选择颜色、线型,或图形,绘制图形

  2. 也可以擦除所绘制的图形。

  3. 还可以输入文本信息等

  4. 用户绘制好的图形可以保存到文件,也可以读取文件中的图形 显示在界面上

  5. 提供撤销和重做功能

1. 应用场景:

绘图板实现铅笔、画刷、取色器、喷枪、橡皮、直线、多边形、矩形、椭圆、圆角矩形、打字的功能,实现了颜色选择,实现了撤销和重做,实现了图片保存、读取等功能。

2. 设计模式:

工厂模式、备忘录模式、单例模式、模板模式、迭代器模式、状态模式。

  1. 工厂模式:实现工具栏的各个工具。

  2. 备忘录模式:实现撤销和重做。

  3. 单例模式:确保只有一个备忘录的状态列表。

  4. 模板模式:创建颜色选择面板和工具栏面板。

  5. 迭代器模式:简化文件过滤器。

  6. 状态模式:实现菜单栏的撤销和重做的是否禁用。

3. 实现代码:

代码由java语言实现。

一、需求分析

    工厂模式是一种创建型设计模式,采用工厂模式通过面向对象的手法,将所要创建的具体对象的创建工作延迟到了子类,从而提供了一种扩展的策略,较好的解决了这种紧耦合的关系。通过定义十一个具体工具的类来实现工具栏的各个功能。备忘录模式就是在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。该模式主要实现撤销和重做。单例模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。单例模式主要解决保证历史纪录的唯一性,节省内存。定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。此模式主要解决创建面板代码的复用问题。迭代器设计模式提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。该模式用来简化文件过滤器。对象的行为依赖于它的状态(属性),并且可以根据它的状态改变而改变它的相关行为。该模式用来实现控制菜单栏的撤销重做的是否禁用。

二、设计模式类图

根据需求分析,绘图板可以采用了六种设计模式,分别是工厂模式、备忘录模式、单例模式、模板模式、迭代器模式和状态模式。

类图

类图

(1) 工厂模式

工厂模式是一种创建型设计模式,采用工厂模式通过面向对象的手法,将所要创建的具体对象的创建工作延迟到了子类,从而提供了一种扩展的策略,较好的解决了这种紧耦合的关系。通过定义十一个具体工具的类来实现工具栏的各个功能。模式类图如图2-1:

工厂模式

工厂模式具体

图2-1 工厂模式类图

(2)备忘录模式

所谓备忘录模式就是在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。该模式主要实现撤销和重做。模式类图如图2-2:

备忘录模式

备忘录具体

图2-2(b)备忘录模式类图

(3) 单例模式

单例模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。单例模式主要解决保证历史纪录的唯一性,节省内存。模式类图如图2-3:

单例模式

单例模式具体

图2-3 单例模式类图

(4)模板模式

定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。此模式主要解决创建面板代码的复用问题。模式类图如图2-4:

模板模式

模板模式具体

图2-4(a) 模板模式类图

(5)迭代器模式

迭代器设计模式提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。该模式用来简化文件过滤器。模式类图如图2-5。

迭代器模式

迭代器模式具体

图2-5迭代器模式类图

(6)状态模式

对象的行为依赖于它的状态(属性),并且可以根据它的状态改变而改变它的相关行为。该模式用来实现控制菜单栏的撤销重做的是否禁用。模式类图如图2-6。

状态模式

状态模式具体

图2-6状态模式类图

三、代码应用

代码列表1

代码列表2

1. 工厂模式

Tool抽象一个工具类,ToolFactory类来实例一个生产工具的工厂。工厂模式主要包含: PencilTool类、BrushTool类、EraserTool类、LineTool类、RectTool类、PolygonTool类、RoundTool类、RoundRectTool类、AtomizerTool类、ColorPickedTool类、TextTool类用来实现各种工具。

2. 备忘录模式

备忘录模式使用三个类 Memento、Originator 和 CareTaker。Memento 包含了要被恢复的对象的状态。Originator 创建并在 Memento 对象中存储状态。Caretaker 对象负责从 Memento 中恢复对象的状态。最终实现撤销和重做。

3. 单例模式

CareTaker类实现了单例模式,其内部维护了一个图片列表,为了节省内存资源,使用了单例模式。

4. 模板模式

创建一个定义操作的 MyPanel抽象类,其中,模板方法设置为 final,这样它就不会被重写。ColorPanel和 ToolPanel是扩展了 MyPanel的实体类,它们重写了抽象类的方法。实现创建颜色选择面板和工具栏面板。

5. 迭代器模式

迭代器模式主要包含;迭代器角色(Iterator),定义遍历元素所需要的方法。具体迭代器角色(ConcreteIterator),实现迭代器接口中定义的方法,完成集合的迭代;容器角色(List),定义集合可以进行的操作;具体容器角色(ConcreteAggregate),就是抽象容器的具体实现类。用来简化文件过滤。

6. 状态模式

状态模式主要包含:State类(状态接口),Context类(具体环境),StartState类,MiddleState类,EndState类。用来实现菜单栏的撤销和重做的是否禁用。

源码请移步CSDN下载:

https://download.csdn.net/download/weixin_35706300/11099426

此为博主副博客,留言请去主博客,转载请注明出处:https://www.baby7blog.com/myBlog/13.html

欢迎关注我的其它发布渠道