
软件设计体系
bueke
。
展开
-
访问者模式实例与解析---实例一:购物车
顾客在超市中将选择的商品,如苹果、图书等放在购物车中,然后到收银员处付款。在购物过程中,顾客需要对这些商品进行访问,以便确认这些商品的质量,之后收银员计算价格时也需要访问购物车内顾客所选择的商品。此时,购物车作为一个ObjectStructure(对象结构)用于存储各种类型的商品,而顾客和收银员作为访问这些商品的访问者,他们需要对商品进行检查和计价。不同类型的商品其访问形式也可能不同,如苹果需要过秤之后再计价,而图书不需要。使用访问者模式来设计该购物过程。public class Appl原创 2021-07-16 13:35:53 · 1810 阅读 · 2 评论 -
模板方法模式实例与解析--实例一:银行业务办理流程
在银行办理业务时,一般都包含几个基本步骤,首先需要取号排队,然后办理具体业务,最后需要对银行工作人员进行评分。无论具体业务是取款、存款还是转账,其基本流程都一样。现使用模板方法模式模拟银行业务办理流程。public abstract class BankTemplateMethod{ public void takeNumber() { System.out.println("取号排队。"); } public abstract void transact();.原创 2021-07-16 13:20:21 · 3545 阅读 · 1 评论 -
策略模式实例与解析--实例一:排序策略
某系统提供了一个用于对数组数据进行操作的类,该类封装了对数组的常见操作,如查找数组元素、对数组元素进行排序等。现以排序操作为例,使用策略模式设计该数组操作类,使得客户端可以动态地更换排序算法,可以根据需要选择冒泡排序或选择排序或插入排序,也能够灵活地增加新的排序算法。public class ArrayHandler{ private Sort sortObj; public int[] sort(int arr[]) { sortObj.sort(arr); retur.原创 2021-07-14 13:12:24 · 2217 阅读 · 0 评论 -
状态模式实例与解析--实例一:论坛用户等级
在某论坛系统中,用户可以发表留言,发表留言将增加积分;用户也可以回复留言,回复留言也将增加积分;用户还可以下载文件,下载文件将扣除积分。该系统用户分为三个等级,分别是新手、高手和专家,这三个等级对应三种不同的状态,这三种状态分别定义如下: (1) 如果积分小于100分,则为新手状态,用户可以发表留言、回复留言,但是不能下载文件。如果积分大于等于1000分,则转换为专家状态;如果积分大于等于100分,则转换为高手状态。 (2) 如果积分大于等于100分但小于1000分,则为高手状态,用户可以发表留言、回复留言原创 2021-07-10 11:47:36 · 1011 阅读 · 1 评论 -
观察者模式实例与解析--实例二:自定义登录控件
Java事件处理模型中应用了观察者模式,下面通过一个实例来学习如何自定义Java控件,并给该控件增加相应的事件。该实例基于Java Swing/AWT控件,在Swing/AWT的相关类中封装了对事件的底层处理。import javax.swing.*;import java.awt.event.*;import java.awt.*;//Concrete Subjectpublic class LoginBean extends JPanel implements Act..原创 2021-07-09 13:26:03 · 517 阅读 · 3 评论 -
观察者模式实例与解析---实例一:猫、狗与老鼠
假设猫是老鼠和狗的观察目标,老鼠和狗是观察者,猫叫老鼠跑,狗也跟着叫,使用观察者模式描述该过程。public class Cat extends MySubject{ public void cry() { System.out.println("猫叫!"); System.out.println("----------------------------"); for(Object obs:observers) { ((MyObserver)obs.原创 2021-07-09 13:22:02 · 2903 阅读 · 0 评论 -
备忘录模式实例与解析--实例:用户信息操作撤销
实例:用户信息操作撤销 某系统提供了用户信息操作模块,用户可以修改自己的各项信息。为了使操作过程更加人性化,现使用备忘录模式对系统进行改进,使得用户在进行了错误操作之后可以恢复到操作之前的状态。package dp.memento;public class UserInfoDTO{ private String account; private String password; private String telNo; public String getAccount.原创 2021-07-09 13:18:37 · 645 阅读 · 0 评论 -
中介者模式实例与解析----实例:虚拟聊天室
某论坛系统欲增加一个虚拟聊天室,允许论坛会员通过该聊天室进行信息交流,普通会员(CommonMember)可以给其他会员发送文本信息,钻石会员(DiamondMember)既可以给其他会员发送文本信息,还可以发送图片信息。该聊天室可以对不雅字符进行过滤,如“日”等字符;还可以对发送的图片大小进行控制。用中介者模式设计该虚拟聊天室。...原创 2021-06-14 10:54:47 · 1474 阅读 · 0 评论 -
迭代器模式实例与解析---实例:电视机遥控器
电视机遥控器就是一个迭代器的实例,通过它可以实现对电视机频道集合的遍历操作,本实例我们将模拟电视机遥控器的实现。原创 2021-06-14 10:50:42 · 4116 阅读 · 4 评论 -
解释器模式实例与解析---实例:数学运算解释器
现需要构造一个语言解释器,使得系统可以执行整数间的乘、除和求模运算。如用户输入表达式“3 * 4 / 2 % 4”,输出结果为2。使用解释器模式实现该功能原创 2021-06-11 19:03:32 · 1810 阅读 · 0 评论 -
命令模式实例与解析--实例一:电视机遥控器
电视机是请求的接收者,遥控器是请求的发送者,遥控器上有一些按钮,不同的按钮对应电视机的不同操作。抽象命令角色由一个命令接口来扮演,有三个具体的命令类实现了抽象命令接口,这三个具体命令类分别代表三种操作:打开电视机、关闭电视机和切换频道。显然,电视机遥控器就是一个典型的命令模式应用实例。...原创 2021-06-09 18:17:09 · 1409 阅读 · 0 评论 -
职责链模式实例与解析---实例:审批假条
某OA系统需要提供一个假条审批的模块,如果员工请假天数小于3天,主任可以审批该假条;如果员工请假天数大于等于3天,小于10天,经理可以审批;如果员工请假天数大于等于10天,小于30天,总经理可以审批;如果超过30天,总经理也不能审批,提示相应的拒绝信息。...原创 2021-06-09 18:06:21 · 1084 阅读 · 0 评论 -
代理模式实例与解析--实例一:论坛权限控制代理
实例一:论坛权限控制代理 在一个论坛中已注册用户和游客的权限不同,已注册的用户拥有发帖、修改自己的注册信息、修改自己的帖子等功能;而游客只能看到别人发的帖子,没有其他权限。使用代理模式来设计该权限管理模块。 在本实例中我们使用代理模式中的保护代理,该代理用于控制对一个对象的访问,可以给不同的用户提供不同级别的使用权限。...原创 2021-06-08 11:02:45 · 2965 阅读 · 0 评论 -
享元模式实例与解析实例二:共享网络设备(有外部状态)
实例二:共享网络设备(有外部状态) 虽然网络设备可以共享,但是分配给每一个终端计算机的端口(Port)是不同的,因此多台计算机虽然可以共享同一个网络设备,但必须使用不同的端口。我们可以将端口从网络设备中抽取出来作为外部状态,需要时再进行设置。...原创 2021-06-06 16:24:09 · 560 阅读 · 3 评论 -
享元模式实例与解析--共享网络设备(无外部状态)
很多网络设备都是支持共享的,如交换机、集线器等,多台终端计算机可以连接同一台网络设备,并通过该网络设备进行数据转发,如图所示,现用享元模式模拟共享网络设备的设计原理。原创 2021-06-06 16:20:42 · 832 阅读 · 0 评论 -
外观模式实例与解析--实例一:电源总开关
现在考察一个电源总开关的例子,以便进一步说明外观模式。为了使用方便,一个电源总开关可以控制四盏灯、一个风扇、一台空调和一台电视机的启动和关闭。通过该电源总开关可以同时控制上述所有电器设备,使用外观模式设计该系统。...原创 2021-06-06 16:15:37 · 1581 阅读 · 2 评论 -
装饰模式实例与解析 实例二:多重加密系统
实例二:多重加密系统 某系统提供了一个数据加密功能,可以对字符串进行加密。最简单的加密算法通过对字母进行移位来实现,同时还提供了稍复杂的逆向输出加密,还提供了更为高级的求模加密。用户先使用最简单的加密算法对字符串进行加密,如果觉得还不够可以对加密之后的结果使用其他加密算法进行二次加密,当然也可以进行第三次加密。现使用装饰模式设计该多重加密系统。public class AdvancedCipher extends CipherDecorator{ public AdvancedCi..原创 2021-04-12 21:15:55 · 3368 阅读 · 3 评论 -
装饰模式实例与解析 实例一:变形金刚
实例一:变形金刚 变形金刚在变形之前是一辆汽车,它可以在陆地上移动。当它变成机器人之后除了能够在陆地上移动之外,还可以说话;如果需要,它还可以变成飞机,除了在陆地上移动还可以在天空中飞翔。public class Airplane extends Changer{ public Airplane(Transform transform) { super(transform); System.out.println("变成飞机!"); } public void fly(.原创 2021-04-12 21:12:27 · 1982 阅读 · 0 评论 -
组合模式实例与解析 实例一:水果盘
实例一:水果盘 在水果盘(Plate)中有一些水果,如苹果(Apple)、香蕉(Banana)、梨子(Pear),当然大水果盘中还可以有小水果盘,现需要对盘中的水果进行遍历(吃),当然如果对一个水果盘执行“吃”方法,实际上就是吃其中的水果。使用组合模式模拟该场景。public class Apple extends MyElement{ public void eat() { System.out.println("吃苹果!"); }}public class Ba..原创 2021-04-12 21:07:19 · 4765 阅读 · 0 评论 -
桥接模式实例与解析 实例一:模拟毛笔
桥接模式实例与解析 实例一:模拟毛笔 现需要提供大中小3种型号的画笔,能够绘制5种不同颜色,如果使用蜡笔,我们需要准备3*5=15支蜡笔,也就是说必须准备15个具体的蜡笔类。而如果使用毛笔的话,只需要3种型号的毛笔,外加5个颜料盒,用3+5=8个类就可以实现15支蜡笔的功能。本实例使用桥接模式来模拟毛笔的使用过程。public class BigPen extends Pen{ public void draw(String name) { String...原创 2021-04-12 20:59:48 · 4204 阅读 · 0 评论 -
软件设计模式--适配器模式--仿生机器人和加密适配器
实例一:仿生机器人 现需要设计一个可以模拟各种动物行为的机器人,在机器人中定义了一系列方法,如机器人叫喊方法cry()、机器人移动方法move()等。如果希望在不修改已有代码的基础上使得机器人能够像狗一样叫,像狗一样跑,使用适配器模式进行系统设计。public interface Robot{ public void cry(); public void move();}public class Dog{ public void wang() { System.out.pr原创 2020-08-13 22:03:03 · 4623 阅读 · 0 评论 -
软件设计模式之单例模式-----身份证号码---打印池
实例一:身份证号码 在现实生活中,居民身份证号码具有唯一性,同一个人不允许有多个身份证号码,第一次申请身份证时将给居民分配一个身份证号码,如果之后因为遗失等原因补办时,还是使用原来的身份证号码,不会产生新的号码。现使用单例模式模拟该场景public class IdentityCardNo{ private static IdentityCardNo instance=null; private String no; private IdentityCardNo()...原创 2020-08-13 21:49:09 · 5076 阅读 · 0 评论 -
软件设计模式---原型模式---邮箱复制(浅克隆和深克隆案例)
实例一:邮件复制(浅克隆) 由于邮件对象包含的内容较多(如发送者、接收者、标题、内容、日期、附件等),某系统中现需要提供一个邮件复制功能,对于已经创建好的邮件对象,可以通过复制的方式创建一个新的邮件对象,如果需要改变某部分内容,无须修改原始的邮件对象,只需要修改复制后得到的邮件对象即可。使用原型模式设计该系统。在本实例中使用浅克隆实现邮件复制,即复制邮件(Email)的同时不复制附件(Attachment)。Attachment类:public class Attachment{ .原创 2020-08-05 15:10:19 · 3441 阅读 · 0 评论 -
软件设计模式--建造者模式---KFC套餐
实例:KFC套餐 建造者模式可以用于描述KFC如何创建套餐:套餐是一个复杂对象,它一般包含主食(如汉堡、鸡肉卷等)和饮料(如果汁、可乐等)等组成部分,不同的套餐有不同的组成部分,而KFC的服务员可以根据顾客的要求,一步一步装配这些组成部分,构造一份完整的套餐,然后返回给顾客。客户端类client:public class Client{ public static void main(String args[]) { //动态确定套餐种类 MealBuild...原创 2020-08-03 11:48:16 · 4345 阅读 · 7 评论 -
抽象工厂模式案例--电气工厂
实例一:电器工厂 一个电器工厂可以产生多种类型的电器,如海尔工厂可以生产海尔电视机、海尔空调等,TCL工厂可以生产TCL电视机、TCL空调等,相同品牌的电器构成一个产品族,而相同类型的电器构成了一个产品等级结构,现使用抽象工厂模式模拟该场景。接口AirConditioner类:public interface AirConditioner{ public void changeTemperature();}客户端类client:public class Cli...原创 2020-08-03 11:39:03 · 2665 阅读 · 0 评论 -
简单工厂方法模式---电视机工厂
实例一:电视机工厂 将原有的工厂进行分割,为每种品牌的电视机提供一个子工厂,海尔工厂专门负责生产海尔电视机,海信工厂专门负责生产海信电视机,如果需要生产TCL电视机或创维电视机,只需要对应增加一个新的TCL工厂或创维工厂即可,原有的工厂无须做任何修改,使得整个系统具有更加的灵活性和可扩展性。Client类:public class Client{ public static void main(String args[]) { try { ..原创 2020-07-09 10:45:57 · 3908 阅读 · 0 评论 -
简单工厂模式的应用--Java加密技术
//获取不同加密算法的密钥生成器 KeyGenerator keyGen=KeyGenerator.getInstance("DESede");//创建密码器 Cipher cp=Cipher.getInstance("DESede");import javax.crypto.Cipher;import javax.crypto.KeyGenerator;import javax.crypto.SecretKey;public class DESEncrypt { public ..原创 2020-07-06 15:06:24 · 321 阅读 · 0 评论 -
软件设计体系-简单工厂模式实例二---权限管理
在某OA系统中,系统根据对比用户在登录时输入的账号和密码以及在数据库中存储的账号和密码是否一致来进行身份验证,如果验证通过,则取出存储在数据库中的用户权限等级(以整数形式存储),根据不同的权限等级创建不同等级的用户对象,不同等级的用户对象拥有不同的操作权限。现使用简单工厂模式来设计该权限管理模块。Administrator 类:public class Administrator extends User{ public Administrator() { System.out.原创 2020-07-06 15:01:01 · 2183 阅读 · 0 评论 -
简单工厂模式之实例一:简单电视工厂
某电视机工厂专为各知名品牌电视代工生产工各类电视,当需要海尔电视机时只需要调用给工厂的工厂方法时传入参数“Haier”,需要海信电视机时只需要传入参数“Hisense”,工厂可以根据传入的不同参数返回不同品牌电视机。现使用简单工厂模式来模拟该电视工厂的生产过程。客户端类:public class Client{ public static void main(String args[]) { try { TV tv;...原创 2020-07-06 14:52:59 · 3653 阅读 · 0 评论 -
组合模式的应用和适配器
在水果盘(Plate)中有一些水果,如苹果(Apple)、香蕉(Banana)、梨子(Pear),当然大水果盘中还可以有小水果盘,现需要对盘中的水果进行遍历(吃),当然如果对一个水果盘执行“吃”方法,实际上就是吃其中的水果。使用组合模式模拟该场景。利用组合者模式设计,用JAVA语言实现(或C#控制台应用程序实现)。绘制该模式的UML图。【模式UML图】【模式代码(JAVA语言实现)】Apple类:public class Apple extends MyElem...原创 2020-06-04 15:57:36 · 877 阅读 · 0 评论