一、实验目的

  1. 掌握Axure RP软件基本用法;
  2. 掌握软件体系结构设计;
  3. 了解常用软件设计模式;

将实验过程中形成的图形、文字内容插入本文档。

二、实验内容

1、当前Web前端最经典的软件体系结构模式是MVC模式(Model-View-Controller),其中的三个组成部分为:

  1. V即View视图是指用户看到并与之交互的界面。比如由html元素组成的网页界面,或者软件的客户端界面。MVC的好处之一在于它能为应用程序处理很多不同的视图。在视图中其实没有真正的处理发生,它只是作为一种输出数据并允许用户操纵的方式。
  2. M即Model模型是指模型表示业务规则。在MVC的三个部件中,模型拥有最多的处理任务。被模型返回的数据是中立的,模型与数据格式无关,这样一个模型能为多个视图提供数据,由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性。
  3. C即Controller控制器是指控制器接受用户的输入并调用模型和视图去完成用户的需求,控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求,然后再确定用哪个视图来显示返回的数据。

在一个复杂的Web站点中,处理一个请求时,需要做很多类似的工作,包括安全认证、国际化、为特定用户提供特殊视图等。如果输入控制器行为分散为多个对象中,这种行为相当一部分会在各处被复制,同时,在运行时改变行为也比较难。前端控制器通过引导请求经过一个处理程序对象来统一所有的请求处理,可以执行一些通用的行为,并且在程序运行时采用decorators来修改这些行为。然后,处理程序就调度一些command对象来处理某一请求的特定行为。前端控制器模式类图如下:

根据上述描述,先画出前端控制器+MVC模式的顺序图,再根据所学的软件分析方法导出MVC模式对应的类图。

2、利用Axure RP软件模仿类似下方的一个Web页面:

操作过程:

1)准备各项元件。从元件库中将所需元件拖放到页面上。如需图片,可从百度下载或搜索得到。按照示例页面,设备各项元件的对齐关系和样式。注意:复选框和右边的链接文字是两个不同元件,只是靠得近。保存,点击菜单“发布>预览”,在浏览器中打开。以后改动该文件后,只要刷新浏览器页面,就可观察到最新的页面。

2)添加两个标签,放置在第一与第二文本框后,内容分别为“不得为空”和“密码长度不得小于6个字符”,并设置隐藏。

3)为第一个文本框添加事件。点击“失去焦点时/设置可见性”,下方选择标签“不得为空”,再点击下方“确定”按钮。然后点击“启用用例”按钮,弹出条件设置对话框,点击“添加逻辑”,设置如下。这表明如果文本框是空的,就会将“不得为空”显示出来。

         

你可以添加更多的逻辑,如判断手机号是否正确,判断邮箱是否正确等。

4)为密码输入框添加类似事件,当密码长度小于6时显示提示。

5)为“换一张”添加事件,点击时将其左边验证码换掉。

6)为“用户协议”标签、“注册”按钮、右上角“登录”按钮添加事件,转至其它页面(其它页面内容不作要求)。

保存本文件,随实验报告一起上交。

3、了解并练习装饰模式的用法

设计模式中装饰模式的介绍如下:

装饰(Decorator)模式的意图

  1. 意图:动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator 模式比生成子类更为灵活
  2. 适用场合:

1)在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责;

2)当不能采用生成子类的方法进行扩充时。一种情况是,可能有大量独立扩展,每一种组合将产生大量的子类,使得子类数目呈爆炸性增长。另一种情况是因为类定义被隐藏,或类定义不能用于生成子类

装饰模式的结构:

  1. Component:对象接口:可以给对象动态地添加职责
  2. ConcreteComponent:具体对象
  3. Decorator:维持一个指向Component对象的指针,并定义一个与Component接口一致的接口
  4. ConcreteDecorator:向组件添加职责
  5. Decorator将请求转发给它的Component对象,并有可能在转发请求前后执行一些附加的动作

装饰模式的评价:

  1. 使用Decorator模式可以很容易地向对象添加职责。可以用添加和分离的方法,在运行时添加和删除职责
  2. 使用Decorator模式可以很容易地重复添加一个特性,而两次继承则极容易出错
  3. 避免在层次结构高层的类有太多的特征:可以从简单的部件组合出复杂的功能。具有低依赖性和低复杂性
  4. 缺点:Decorator与Component不一样,使用装饰时不应该依赖对象标识;有许多小对象

基于上述内容,编写代码,以两种方式实现该模式:。

例1:游戏中,角色Character可以有属性attack, defence,可以有装备weapen, armour,可以对属性造成影响,它们可以是类的属性;可以随时变成巨人gigantize,可以变狂暴furious,都可以对attack和defence形成影响,它们可以形成装饰。

package io.shentuzhigang.demo.design;import org.junit.jupiter.api.Test;/*** @author ShenTuZhiGang* @version 1.0.0* @date 2020-11-19 14:22*/public class DecoratorTEST{@Testpublic void t(){Character person = new ConcreteCharacter();Decorator decorator = new Gigantize(new Person(person));decorator.weapen();decorator.armour();}
}
interface Character {public void weapen();public void armour();
}
class ConcreteCharacter implements Character{@Overridepublic void weapen() {System.out.println("ConcreteCharacter+weapen");}@Overridepublic void armour() {System.out.println("ConcreteCharacter+armour");}
}
abstract class Decorator implements Character{private Character character;public Decorator(Character character){this.character = character;}String attack;String defence;@Overridepublic void weapen() {this.character.weapen();}@Overridepublic void armour() {this.character.armour();}
}
class Person extends Decorator {public Person(Character character) {super(character);}@Overridepublic void weapen() {super.weapen();System.out.println("Person+weapen");}@Overridepublic void armour() {super.armour();System.out.println("Person+armour");}
}class Gigantize extends Decorator {public Gigantize(Character character) {super(character);}public void furious(){System.out.println("furious");}@Overridepublic void weapen() {super.weapen();System.out.println("Gigantize+weapen");}@Overridepublic void armour() {super.armour();System.out.println("Gigantize+armour");}
}

例2:考试成绩Score,如果直接告诉(report)成绩(例如65分),家长会生气;加一个装饰器,先告诉家长,这次考试比上次增加了几分,家长会比较高兴;加一个装饰器,告诉家长,这次考试最高成绩比我只高一点,家长也会比较高兴;加一装饰器,告诉家长,这次考试班级排名前列,家长也会比较高兴。

package io.shentuzhigang.demo.design.score;import org.junit.jupiter.api.Test;/*** @author ShenTuZhiGang* @version 1.0.0* @date 2020-11-19 18:40*/
public class ScoreTEST {@Testpublic void t(){Person person = new Person();Decorator decorator = new Decorator_zero(new Decorator_first(new Decorator_two(person)));decorator.report();}
}
interface Reportor{void report();
}
abstract class Decorator implements Reportor{private Reportor reportor;public Decorator(Reportor reportor){this.reportor = reportor;}@Overridepublic void report() {reportor.report();}
}class Decorator_zero extends Decorator {public Decorator_zero(Reportor reportor) {super(reportor);}@Overridepublic void report() {System.out.println("这次考试比上次增加了几分");super.report();}
}class Decorator_first extends Decorator {public Decorator_first(Reportor reportor) {super(reportor);}@Overridepublic void report() {System.out.println("这次考试最高成绩比我只高一点");super.report();}
}class Decorator_two extends Decorator {public Decorator_two(Reportor reportor) {super(reportor);}@Overridepublic void report() {System.out.println("这次考试班级排名前列");super.report();}
}class Person implements Reportor {@Overridepublic void report() {System.out.println("65");}
}

参考文章

设计模式——装饰者(Decorator)模式DEMO——成绩汇报的装饰者模式实现

设计模式——装饰者(Decorator)模式DEMO——游戏角色的装饰者模式实现

设计模式之装饰者模式(实例+Demo)

JAVA设计模式初探之装饰者模式

《软件工程》实验报告——软件设计相关推荐

  1. 如何编写一份软件工程实验报告

    软件工程实验报告,实际上写的是一份软件需求说明书. 首先是封面.说明自己的个人信息,项目,班级,姓名,指导教师. 然后是正文部分: 正文部分,第一,介绍一下自己要做的项目 第二,可行性研究.用最小的代 ...

  2. 软件工程实验报告 一

    软件工程实验报告 一 一.实验名称 桌面小工具需求分析 二.实验目的 完成几个实用应用系统的需求分析,建立需求模型计: 系统掌握软件开发过程中需求分析报告的写法. 三.实验主要内容 将整个需求分析过程 ...

  3. android常用控件实验报告,ui设计实验报告.doc

    ui设计实验报告 ui设计实验报告 篇一:UI设计实验报告 实验项目四:UI设计 一. 实验目的和要求 1.熟练运用Eclipse软件中的swing设计. 2.掌握UI编写的软件. 3.能都熟练的进行 ...

  4. 软件工程实验报告二模板

    软件工程实验报告二 软件可行性分析报告编写 目录 附件一.可行性研究报告 1引言 1.1编写目的 1.2背景 1.3定义

  5. 《大话软件工程—需求分析与软件设计》,给出了分析与设计过程中需要的理论、方法、工具和标准

    □ 做好一款软件从哪里开始呢?→ 客户需求的调研: □ 一款软件的价值高低由哪个环节决定呢?→ 软件的分析与设计: □ 软件顺利完成开发靠什么?→ 高效的项目管理: □ 软件开发的主要角色?→ 客户. ...

  6. 闹钟Android实验报告,闹钟设计实验报告.doc

    闹钟设计实验报告 闹钟设计实验报告 院系: 计算机与通信学院 专业: 计算机科学与技术 班级: 01154 班 姓名: 伍晨曦 (13号) 指导老师: 杨 华 实验目的: 学会VHDL语言的并发执行的 ...

  7. 软件质量保证与测试 实验一:白盒测试用例设计 实验报告,软件质量保证与测试实验报告...

    <软件质量保证与测试>实验报告 实验一 白盒测试技术 (实验日期:12(2)11(3)班9月22日-9月29日) (实验日期:12(1)班9月23日-9月30日) 一.实验目的 1. 熟练 ...

  8. 软件工程实验报告四软件总体设计及文档编写

    一.实验目的 1.通过实验掌握软件总体设计: 2.掌握软件总体设计说明书的设计要求: 3.熟悉Microsoft Visio,Rose,PowerDesigner开发环境. 二.实验内容及要求 1.对 ...

  9. 计算机图形人机交互实验报告,用户界面设计人机交互实验报告.doc

    用户界面设计人机交互实验报告 <人机交互>实验报告 题目 实验一 图形用户界面的设计 专业 软件工程 班级 2011 学号 2011221104220026 姓名 孙元喜 导教师 关玉欣 ...

最新文章

  1. 重学前端学习笔记(三十六)--Flex 布局
  2. 依据imu姿态角计算z轴倾角_1. 姿态的表示方法
  3. 【代码笔记】iOS-播放从网络上下载的语音
  4. flutter在2019年会有怎样的表现?
  5. php load dynamic library,PHP startup: Unable to load dynamic library错误的错误
  6. GitHub 版本控制 项目托管 04 创建GitHub远程仓库
  7. CentOS环境Tomcat配置JDK的另一种方式
  8. [转载] 老版本ubuntu 更新源
  9. Silverlight/Windows8/WPF/WP7/HTML5周学习导读(8月5日-8月12日)
  10. [HTML5]使用Box2dWeb模拟射箭效果并添加能量槽
  11. heap堆(自己做菜)(空间很大),stack栈(餐馆吃饭)(能从栈获得的空间较小),static(全局变量和静态变量的存储),文字常量区,程序代码区,以及ROM,RAM,Flash
  12. 【总结】动态规划 or 组合数学解决棋盘(迷宫)路径问题(持续更新中)
  13. 系统分析师视频教程-张友生
  14. 单片机原理及应用实验报告
  15. 空间注意力 通道注意力_注意力发生了什么变化?
  16. 如何登陆计算机服务器,电脑服务器怎样登陆
  17. 02:一文全解:利用谷歌深度学习框架Tensorflow识别手写数字图片(初学者篇)
  18. [网络工程师]-防火墙-入侵防护系统IPS
  19. 银行支付接口测试怎么执行
  20. Matlab中正则表达式

热门文章

  1. NASM、MASM浅谈
  2. 86句管理名言:管理=勤奋+智慧+知识+心理学
  3. mysql定时器每月执行一次_MySQL定时器可以设置执行次数吗
  4. python制作好看的界面_【一点资讯】Python界面如何漂亮的展示树形结构,PyQt5控件之QTreeWidget详解 www.yidianzixun.com...
  5. vla点转为lisp点_专家们说,中国股市将进入牛市,大盘可能超12000点是真吗?
  6. equals变量在前面和后面的区别,equals已知(存在实际值)的变量在前的好处
  7. 虚拟成像技术_AI帝国将崛起,国内幻真虚拟成像技术第一家
  8. vmlinux 反汇编_ARM Linux内核驱动异常定位方法分析--反汇编方式
  9. l2的最优回归_【机器学习】逻辑回归(非常详细)
  10. tensorflow处理简单线性回归