随笔分类 -  design_pattern

设计模式
摘要:(目录) 实例 数据转换工具 Sunny软件公司欲开发一个数据转换工具,可以将数据库中的数据转换成多种文件格式,例如txt、xml、pdf等格式,同时该工具需要支持多种不同的数据库 初始设计方案如上图所示,使用了一种多层继承结构,Data是抽象父类,每一种类型的文件类如XmlData、TxtData 阅读全文
posted @ 2022-10-23 18:43 Maggieq8324 阅读(98) 评论(0) 推荐(0)
摘要:(目录) 实例 界面控件库 假设一个界面控件库的设计场景,界面控件分为两大类,一类是单元控件,例如按钮、文本框等,一类是容器控件,例如窗体、中间面板等,用户可以根据需要自行搭配使用 初始解决方案 Button.java /** * @Description 单元控件:按钮 */ public cla 阅读全文
posted @ 2022-09-27 21:41 Maggieq8324 阅读(59) 评论(0) 推荐(0)
摘要:(目录) 实例 文档编辑器的设计 假设一个多功能文档编辑器的应用场景,在文档中可以插入图片、动画、视频等多媒体资料,为了节约系统资源,相同的图片、动画和视频在同一个文档中只需保存一份,但是可以多次重复出现,而且它们每次出现时位置和大小均可不同 解决方案 如果将每个文件都以单独的对象来表示,将会占用较 阅读全文
posted @ 2022-08-21 21:59 Maggieq8324 阅读(62) 评论(0) 推荐(0)
摘要:(目录) 实例 数据加密 假设一个系统需要使用加密模块将用户机密信息(如口令、邮箱等)加密之后再存储在数据库中的场景,系统已经定义好了数据库操作类,为了提高开发效率,需要重用已有的加密算法,这些算法封装在一些由第三方提供的类中,需求:实现在不修改现有类的基础上重用第三方加密方法 现有实现 User. 阅读全文
posted @ 2022-07-31 22:05 Maggieq8324 阅读(88) 评论(0) 推荐(0)
摘要:(目录) 实例 数据加密 假设一个数据加密的应用场景,可以对字符串进行加密,用户先使用最简单的加密算法对字符串进行加密,如果觉得不够,可以对加密后的结果使用MD5、AES、RSA等加密算法进行二次加密 解决方案 Encrypt.java /** * @Description 加密 */ public 阅读全文
posted @ 2022-04-12 23:19 Maggieq8324 阅读(70) 评论(0) 推荐(0)
摘要:(目录) 实例 手机一键备份功能 假设一个智能手机一键备份数据的应用场景,该功能可以将手机中的通讯录,短信,照片,歌曲等资料一次性备份,在实现过程中需要与多个已有的子系统进行交互,如通讯录子系统、短信子系统等 乍一看该应用场景,如果再添一句需充分考虑系统的灵活性和可扩展性那就与工厂方法模式很类似了, 阅读全文
posted @ 2022-03-31 07:17 Maggieq8324 阅读(50) 评论(0) 推荐(0)
摘要:(目录) 概念 原型模式(Prototype Pattern):使用原型实例指定创建对象的种类,并且通过克隆这些原型创建新的对象 原型模式是一种对象创建型模式 原型模式最典型的例子就是孙悟空用猴毛复制出和自己一模一样的分身来,通过原型对象克隆出多个一模一样的对象就是原型模式 编码 实例 通过原型模式 阅读全文
posted @ 2022-03-28 18:24 Maggieq8324 阅读(46) 评论(0) 推荐(0)
摘要:(目录) 实例 数据库连接池 假设一个数据库连接池的创建场景,将指定个数的数据库连接对象存储在连接池中,客户端可以从池中随机取一个连接对象来连接数据库,设计一个能够自行提供指定个数实例对象的数据库连接类 数据库连接池是系统开发需要面对和考虑的问题,主要是减少重复连接数据库的代价;在系统中创建预期数量 阅读全文
posted @ 2022-03-15 23:15 Maggieq8324 阅读(136) 评论(0) 推荐(0)
摘要:(目录) 实例 软件界面多种显示模式 假设一个视频播放软件提供多种界面显示模式的应用场景,该软件支持完整模式、精简模式、记忆模式等;在不同的显示模式下主界面的组成元素有所差异,如:在完整模式下显示主菜单、播放列表、主窗口、控制条;在精简模式下只显示主窗口、控制条;在记忆模式下显示主窗口、控制条、收藏 阅读全文
posted @ 2022-03-07 10:50 Maggieq8324 阅读(65) 评论(0) 推荐(0)
摘要:(目录) 实例 手机软件初始化 假设一个手机软件初始化的应用场景,该软件支持IOS、Android、Windows等多个操作系统平台,针对不同的操作系统,该软件提供了不同的操作功能(Operation)类和操作界面(Surface)类,并提供相应的工厂类来封装这些类的初始化过程。软件要求具有较好的扩 阅读全文
posted @ 2022-03-05 20:12 Maggieq8324 阅读(54) 评论(0) 推荐(0)
摘要:(目录) 概念 里氏替换原则(Liskov Substitution Principle, LSP):一个软件实体如果适用一个父类的话,那一定适用于其子类,所有引用父类的地方必须能透明地使用其子类的对象,子类对象能够替换父类对象,而程序逻辑不变。 里氏替换原则表眀,在软件中将一个基类对象替换成他的子 阅读全文
posted @ 2022-01-10 07:00 Maggieq8324 阅读(51) 评论(0) 推荐(0)
摘要:(目录) 实例 先看一个例子 图片读取器 设计一个可以读取不同类型图片格式的程序,针对每种图片格式都需要一个图片读取器,如GIF读取器用于读取GIF图片,JPG读取器用于读取JPG图片,需充分考虑系统的灵活性和可扩展性 简单工厂解决方案 使用简单工厂的解决方案大致如下: Img.java /** * 阅读全文
posted @ 2021-12-26 21:51 Maggieq8324 阅读(161) 评论(0) 推荐(1)
摘要:(目录) 实例 图表库 开发人员希望开发一套灵活易用的图表库,可以为应用系统提供各种不同外观的图表,如:柱状图,饼图,折线图等。 初始设计方案将所有的图表实现代码封装在一个Chart类中,其代码如下: Chart.java public class Chart { /** * 图表类型 */ pri 阅读全文
posted @ 2021-12-21 06:53 Maggieq8324 阅读(53) 评论(0) 推荐(0)
摘要:(目录) 概念 合成复用原则(Composite Reuse Principle, CRP):尽量使用对象组合(contains-A)/聚合(has-A),而不是继承关系达到软件复用的目的。 合成复用原则就是在一个新的对象里通过关联关系(包括组合关系和聚合关系)来使用一些已有的对象,使之成为新对象的 阅读全文
posted @ 2021-12-20 10:25 Maggieq8324 阅读(461) 评论(0) 推荐(0)
摘要:(目录) 概念 迪米特法则(Law of Demeter, LoD):一个软件实体应当尽可能少地与其他实体发生相互作用。 核心观念:类之间的解耦,尽量降低类与类之间的耦合。 优点:降低类之间的耦合。 强调:只和朋友(出现在成员变量、方法的输入、输出参数中的类成为成员朋友类,而出现在方法体内部的类不属 阅读全文
posted @ 2021-12-07 11:12 Maggieq8324 阅读(38) 评论(0) 推荐(0)
摘要:(目录) 概念 定义:Interface Segregation Principle,ISP,使用多个专门的接口,而不使用单一的总接口,客户端不应该依赖它不需要的接口 一个类对一个类的依赖应该建立在最小的接口上 建立单一接口,不要建立庞大臃肿的接口 尽量细化接口,接口中的方法尽量少 注意适度原则,一 阅读全文
posted @ 2021-12-07 07:03 Maggieq8324 阅读(48) 评论(0) 推荐(0)
摘要:(目录) 概念 定义:单一职责原则(Single Responsibility Principle,SRP),一个类只负责一个功能领域中的相应职责,不要存在多余一个导致类变更的原因。 核心思想:一个类不应该承担过多的职责。在软件系统中,一个类承担的职责越多,其被复用的可能性就越小,且其中一个职责发生 阅读全文
posted @ 2021-12-06 22:46 Maggieq8324 阅读(57) 评论(0) 推荐(0)
摘要:(目录) 概念 依赖倒置原则的定义:Dependency Inversion Principle,DIP,高层模块不应该依赖低层模块,二者都应该依赖其抽象。 依赖倒置原则的中心思想:抽象不应该依赖细节;细节应该依赖抽象。 依赖倒置原则的核心思想:针对接口编程,不要针对实现编程。 依赖倒置原则的优点: 阅读全文
posted @ 2021-12-06 07:02 Maggieq8324 阅读(168) 评论(0) 推荐(0)
摘要:(目录) 概念 开闭原则的定义:Open-Closed Principle,OCP,一个软件实体应当对扩展开放,对修改关闭。 开闭原则的中心思想:用抽象构建框架,用实现扩展细节。 开闭原则的优点:提高软件系统的可复用性及可维护性 实现开闭原则的核心思想:面向抽象编程。 一句话理解:软件实现应对扩展开 阅读全文
posted @ 2021-12-03 11:33 Maggieq8324 阅读(68) 评论(0) 推荐(0)