精华内容
下载资源
问答
  • 武汉某高校,计算机学院,软件体系结构设计的课设。要求对开发某项目撰写各种文档报告。
  • 实验名称 中介者模式的应用 日期 2019年 04 月9 日 ...某软件公司要开发一套CRM系统,其中包含一个客户信息管理模块,所设计的“客户信息管理窗口”界面效果图如下图所示: 用JAVA语言...

    实验名称             中介者模式的应用                    日期 2019 04 9

    一、实验目的:

    1) 掌握命令模式(Commond)的特点

    2) 分析具体问题,使用命令模式进行设计。

     

    某软件公司要开发一套CRM系统,其中包含一个客户信息管理模块,所设计的“客户信息管理窗口”界面效果图如下图所示:

     

     

     

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

     

    二、实验环境:

     

     

     

    三、实验内容:

    【模式UML图】

     

     

    【模式代码】

    package 实验12;
    
    public class Button extends Component {
    
        @Override
        public void Update(){
    
        }
    }
    
    package 实验12;
    
    public class Client {
        public static void main(String[] args) {
    
            {
              
                ConcreteMediator mediator = new ConcreteMediator();
    
     
                Button addButton = new Button();
                List list = new List();
                ComboBox cb = new ComboBox();
                TextBox userNameTextBox = new TextBox();
    
                addButton.SetMediator(mediator);
                list.SetMediator(mediator);
                cb.SetMediator(mediator);
                userNameTextBox.SetMediator(mediator);
    
                mediator.addButton = addButton;
                mediator.list = list;
                mediator.cb = cb;
                mediator.userNameTextBox = userNameTextBox;
    
              
                addButton.Changed();
    
                System.out.println("-----------------------------------------");
    
                
                list.Changed();
            }
        }
    }
    
    package 实验12;
    
    public class ComboBox extends Component {
    
        @Override
        public void Update(){
            System.out.println("在列表框增加: 张无忌");
        }
    
        public void Select(){
            System.out.println("在列表框选中: 小龙女");
        }
    }
    
    package 实验12;
    
    public abstract class Component {
    
        protected Mediator mediator;
    
        public void SetMediator(Mediator mediator){
            this.mediator = mediator;
        }
    
        public void Changed(){
            mediator.componentChanged(this);
        }
    
        public abstract void Update();
    }
    
    package 实验12;
    
    
    public class ConcreteMediator extends Mediator{
    
        @Override
        public void componentChanged(Component c) {
    
            if(c == addButton){
                System.out.println("增加按钮");
                list.Update();
                cb.Update();
                userNameTextBox.Update();
            }
    
            else if(c == list){
                System.out.println("列表框");
                cb.Select();
                userNameTextBox.SetText();
            }
    
            else if(c == cb){
                System.out.println("组合框");
                cb.Select();
                userNameTextBox.SetText();
            }
        }
    
    
        public Button addButton;
        public List list;
        public TextBox userNameTextBox;
        public ComboBox cb;
    
    
    }
    
    package 实验12;
    
    public class Lable extends Component {
    
        @Override
        public void Update(){
            System.out.println("文本标签内容改变,客户信息总数量加1");
        }
    }
    
    package 实验12;
    
    public class List extends Component {
    
        @Override
        public void Update(){
            System.out.println("在列表框增加: 张无忌");
        }
    
        public void Select(){
            System.out.println("在列表框选中: 小龙女");
        }
    }
    
    package 实验12;
    
    public abstract class Mediator {
        public  abstract void  componentChanged(Component c);
    }
    
    package 实验12;
    
    public class TextBox extends Component {
    
        @Override
        public void Update(){
            System.out.println("客户信息增加成功后文本框清空");
        }
    
        public void SetText(){
            System.out.println("文本框显示: 小龙女");
        }
    }
    

    运行截图

     

    四、心得体会:

    中介者模式主要适用于以下情况:

     1、系统中对象之间存在比较复杂的引用关系,导致它们之间的依赖关系结构混乱而且难以复用该对象。

     2、想通过一个中间类来封装多个类中的行为,而又不想生成太多的子类。

     

     

     

     

     

     

     

     

     

     

     

    展开全文
  • 实验名称 外观模式的应用 日期 2018年 04...某软件公司要开发一个可应用于多个软件的文件加密模块,该模块可以对文件中的数据进行加密并将加密之后的数据存储在一个新文件中,具体的流程包括3个部分,分别是读取源文...

    实验名称             外观模式的应用                    日期 2018 04 1

    一、实验目的:

    1) 掌握外观模式(Facade)的特点

    2) 分析具体问题,使用外观模式进行设计。

     

    某软件公司要开发一个可应用于多个软件的文件加密模块,该模块可以对文件中的数据进行加密并将加密之后的数据存储在一个新文件中,具体的流程包括3个部分,分别是读取源文件、加密、保存加密之后的文件,其中,读取文件和保存文件使用流来实现,加密操作通过求模运算实现。这3个操作相对独立,为了实现代码的独立重用,让设计更符合单一职责原则,这3个操作的业务代码封装在3个不同的类中。

    现使用外观模式设计该文件加密模块。

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

     

     

    二、实验环境:

     

     

     

    三、实验内容:

    模式UML

    【模式代码(JAVA语言实现)】

    public class EncryptTest {
    
    	public static void main(String[] args) {
    		
    		EncryptFacade encryptFacade = new EncryptFacade();
    		encryptFacade.FileEncrypt("D:\\mingwen.txt", "D:\\miwen.txt");
    
    	}
    
    }
    
    public class EncryptFacade {
    
    	private FileReader fileReader;
    	private CipherMachine cipherMachine;
    	private FileWriter fileWriter;
    	
    	public EncryptFacade(){
    		fileReader = new FileReader();
    		cipherMachine = new CipherMachine();
    		fileWriter = new FileWriter();
    	}
    	
    	public void FileEncrypt(String fileNameSrc,String fileNameDes){
    		String plainString = fileReader.Read(fileNameSrc);
    		String encryptString =  cipherMachine.Encrypt(plainString);
    		fileWriter.Write(encryptString, fileNameDes);
    	}
    
    }
    
    public class FileReader {
    
    	public String Read(String fileName){
    		System.out.println("获取文件,读取明文");
    		StringBuilder stringBuilder = new StringBuilder();
    		File file = new File(fileName);
    		try {
    			FileInputStream fileInputStream = new FileInputStream(file);
    			BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);
    			
    			int data;
    			while((data = bufferedInputStream.read()) != -1){
    				stringBuilder = stringBuilder.append((char)data);
    			}
    			bufferedInputStream.close();
    			fileInputStream.close();
    		} catch (FileNotFoundException e) {
    			e.printStackTrace();
    		}catch (IOException e) {
    			e.printStackTrace();
    		}
    		System.out.println(stringBuilder.toString());
    		return stringBuilder.toString();
    	}
    }
    
    public class FileWriter {
    
    	public void Write(String encryptText,String fileName){
    		File file = new File(fileName);
    		try {
    			FileOutputStream fileOutputStream = new FileOutputStream(file);
    			BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(fileOutputStream);
    			byte[] b = encryptText.getBytes();
    			bufferedOutputStream.write(b);
    			bufferedOutputStream.close();
    			fileOutputStream.close();
    		} catch (FileNotFoundException e) {
    			e.printStackTrace();
    		}catch (IOException e) {
    			e.printStackTrace();
    		}
    	}
    }
    
    public class CipherMachine {
    
    	public String Encrypt(String mingwen){
    		System.out.println("明文转化成密文");
    		String e = "";
    		char[] c = mingwen.toCharArray();
    		for(char c1 : c){
    			e = e + (int)c1 % 7;
    		}
    		System.out.println(e);
    		return new String(e);
    	}
    }
    

    【运行截图】

    四、心得体会:

     

    通过本次实验,学会了使用外观模式。外观模式的适用性如下:

     

    客户端不需要知道系统内部的复杂联系,整个系统只需提供一个"接待员"即可。

    定义系统的入口。

     

     

     

     

     

     

     

    展开全文
  • 实验名称 迭代器模式的应用 日期 2018年 04 月2 日 ...某软件公司为某商场开发了一套销售管理系统,在对该系统进行分析和设计时,开发人员发现经常需要对系统中的商品数据、客户数据等进行遍历,为了复用这些遍...

    实验名称             迭代器模式的应用                    日期 2018 04 2

    一、实验目的:

    1) 掌握迭代器模式(Iterator)的特点

    2) 分析具体问题,使用迭代器模式进行设计。

     

     

    某软件公司为某商场开发了一套销售管理系统,在对该系统进行分析和设计时,开发人员发现经常需要对系统中的商品数据、客户数据等进行遍历,为了复用这些遍历代码,开发人员设计了一个抽象的数据集合类AbstractObjectList,将存储商品和客户等数据的类作为其子类,AbstractObjectList类结构如下图所示:

    在图中,List类型的对象objects用于存储数据,其方法与说明如下表所示:

     

    AbstractObjectList类的子类ProductList和CustomerList分别用于存储商品数据和客户数据。

    现使用迭代器模式设计该销售管理系统。

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

     

     

    二、实验环境:

     

     

     

    三、实验内容:

    模式UML

    【模式代码(JAVA语言实现)】

    package 实验9;
    //抽象迭代器
    interface AbstractIterator {
        public void next(); //移至下一个元素
        public boolean isLast(); //判断是否为最后一个元素
        public void previous(); //移至上一个元素
        public boolean isFirst(); //判断是否为第一个元素
        public Object getNextItem(); //获取下一个元素
        public Object getPreviousItem(); //获取上一个元素
    }
    
    package 实验9;
    
    import java.util.ArrayList;
    import java.util.List;
    //抽象聚合类
    abstract class AbstractObjectList {
        protected List<Object> objects = new ArrayList<Object>();
    
        public AbstractObjectList(List objects) {
            this.objects = objects;
        }
    
        public void addObject(Object obj) {
            this.objects.add(obj);
        }
    
        public void removeObject(Object obj) {
            this.objects.remove(obj);
        }
    
        public List getObjects() {
            return this.objects;
        }
    
        //声明创建迭代器对象的抽象工厂方法
        public abstract AbstractIterator createIterator();
    }
    
    package 实验9;
    import java.util.List;
    
    //商品迭代器:具体迭代器
    class ProductIterator implements AbstractIterator {
        private ProductList productList;
        private List products;
        private int cursor1; //定义一个游标,用于记录正向遍历的位置
        private int cursor2; //定义一个游标,用于记录逆向遍历的位置
    
        public ProductIterator(ProductList list) {
            this.productList = list;
            this.products = list.getObjects(); //获取集合对象
            cursor1 = 0; //设置正向遍历游标的初始值
            cursor2 = products.size() -1; //设置逆向遍历游标的初始值
        }
    
        public void next() {
            if(cursor1 < products.size()) {
                cursor1++;
            }
        }
    
        public boolean isLast() {
            return (cursor1 == products.size());
        }
    
        public void previous() {
            if (cursor2 > -1) {
                cursor2--;
            }
        }
    
        public boolean isFirst() {
            return (cursor2 == -1);
        }
    
        public Object getNextItem() {
            return products.get(cursor1);
        }
    
        public Object getPreviousItem() {
            return products.get(cursor2);
        }
    }
    
    package 实验9;
    
    import java.util.List;
    //商品数据类:具体聚合类
    class ProductList extends AbstractObjectList {
        public ProductList(List products) {
            super(products);
        }
    
        //实现创建迭代器对象的具体工厂方法
        public AbstractIterator createIterator() {
            return new ProductIterator(this);
        }
    }
    
    package 实验9;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class Client {
    
        public static void main(String[] args) {
    
            List products = new ArrayList();
            products.add("李云龙");
            products.add("楚云飞");
            products.add("意大利炮");
            products.add("一个营的装备");
            products.add("魏大勇");
            products.add("段鹏");
    
            AbstractObjectList list  = new ProductList(products); //创建聚合对象
            AbstractIterator iterator = list.createIterator(); //创建迭代器
    
            System.out.println("正向遍历:");
            while (!iterator.isLast()){
                System.out.print(iterator.getNextItem() + ",");
                iterator.next();
            }
    
            System.out.println();
            System.out.println("---------------------------");
            System.out.println("逆向遍历:");
            while (!iterator.isFirst()){
                System.out.print(iterator.getPreviousItem() + ",");
                iterator.previous();
            }
        }
    }
    

    【运行截图】

     

     

     

     

     

     

     

     

    展开全文
  • 实验名称 桥接模式的应用 日期 2018年 04 月1 日 一、实验目的: ...某软件公司要开发一个跨平台图像浏览系统,要求该系统能够显示BMP、JPG、GIF、PNG等多种格式的文件,并且能够在Windows、Linux、UNIX等...

    实验名称             桥接模式的应用                    日期 2018 04 1

    一、实验目的:

    1) 掌握桥接模式(Bridge)的特点

    2) 分析具体问题,使用桥接模式进行设计。

     

     

    某软件公司要开发一个跨平台图像浏览系统,要求该系统能够显示BMP、JPG、GIF、PNG等多种格式的文件,并且能够在Windows、Linux、UNIX等多个操作系统上运行。系统首先将各种格式的文件解析为像素矩阵(Matrix),然后将像素矩阵 显示在屏幕上,在不同的操作系统中可以调用不同的绘制函数来绘制像素矩阵。另外,系统需具有较好的扩展性,以便在将来支持新的文件格式和操作系统。·

    现使用桥接模式设计该跨平台图像浏览系统。

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

    模式UML图】

     

    二、实验环境:

     

     

     

    三、实验内容:

    【模式代码】

    package 实验8;
    
    public class BMPImage extends Image {
        public void parseFile(String fileName){
            Matrix matrix = new Matrix();
            imageImp.doPaint(matrix);
            System.out.println(fileName + " BMP图片");
        }
    }
    
    <?xml version="1.0"?>
    <config>
        <!--RefinedAbstraction-->
        <className>实验8.JPGImage</className>
            <!--ConcreteImplementor-->
        <className>实验8.WindowsImp</className>
    </config>
    
    package 实验8;
    
    public class GIFImage extends Image {
        public void parseFile(String fileName){
            Matrix matrix = new Matrix();
            imageImp.doPaint(matrix);
            System.out.println(fileName + ".GIF");
        }
    }
    
    package 实验8;
    
    public abstract class Image {
        protected  ImageImp imageImp;
    
        public void setImageImp(ImageImp imageImp){
            this.imageImp = imageImp;
        }
    
        public abstract void parseFile(String fileName);
    }
    
    package 实验8;
    
    public interface ImageImp {
        public void doPaint(Matrix matrix);
    }
    
    package 实验8;
    
    public class JPGImage extends Image{
        public void parseFile(String fileName){
            Matrix matrix = new Matrix();
            imageImp.doPaint(matrix);
            System.out.println(fileName + ".JPG");
        }
    }
    
    package 实验8;
    
    public class Matrix {
    }
    
    package 实验8;
    
    public class PNGImage extends Image {
        public void parseFile(String fileName){
            Matrix matrix = new Matrix();
            imageImp.doPaint(matrix);
            System.out.println(fileName + ".PNG");
        }
    }
    
    package 实验8;
    
    public class UnixImp implements ImageImp{
        public void doPaint(Matrix matrix){
            System.out.println("在Unix系统显示图片:");
        }
    }
    

     

    package 实验8;
    
    public class WindowsImp implements ImageImp {
        public void doPaint(Matrix matrix){
            System.out.println("在Windows系统显示图片:");
        }
    }
    
    package 实验8;
    
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import org.w3c.dom.*;
    import java.io.*;
    
    public class XMLUtil {
        public static Object getBean(String args){
            try {
                //创建文档对象
                DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance();
                DocumentBuilder builder = dFactory.newDocumentBuilder();
                Document doc;
                doc = builder.parse(new File("D:\\软件集合\\IntelliJ IDEA Community Edition 2018.3.2\\JAVA\\JAVA\\src\\实验8\\config.xml"));
                NodeList nl=null;
                Node classNode=null;
                String cName=null;
                nl = doc.getElementsByTagName("className");
    
                if(args.equals("image")) {
                    //获取第一个包含类名的节点,即扩充抽象类
                    classNode=nl.item(0).getFirstChild();
    
                }
                else if(args.equals("os")) {
                    //获取第二个包含类名的节点,即具体实现类
                    classNode=nl.item(1).getFirstChild();
                }
    
                cName=classNode.getNodeValue();
                //通过类名生成实例对象并将其返回
                Class c=Class.forName(cName);
                Object obj=c.newInstance();
                return obj;
            }
            catch(Exception e) {
                e.printStackTrace();
                return null;
            }
    
        }
    }
    
    package 实验8;
    
    public class ImageTest {
    
        public static void main(String args[]) {
    
                Image image;
                ImageImp imp;
                image = (Image)XMLUtil.getBean("image");
                imp = (ImageImp)XMLUtil.getBean("os");
                image.setImageImp(imp);
                image.parseFile("李云龙");
    
    //        Image BMP=new BMPImage();
    //        ImageImp windowsImp = new WindowsImp();
    //        BMP.setImageImp(windowsImp);
    //        BMP.parseFile("李云龙");
    //
    //        BMP.setImageImp(new UnixImp());
    //        BMP.parseFile("楚云飞");
        }
    }
    

    运行截图

     

    四、心得体会:

    桥接模式主要适用于以下情况:

     1、如果一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的继承联系,通过桥接模式可以使它们在抽象层建立一个关联关系。

    2、对于那些不希望使用继承或因为多层次继承导致系统类的个数急剧增加的系统,桥接模式尤为适用。

    3、一个类存在两个独立变化的维度,且这两个维度都需要进行扩展。

     

     

     

     

     

     

     

     

     

    展开全文
  • 2) 分析具体问题,使用工厂模式进行设计。 有一个OEM制造商代理做HP笔记本电脑(Laptop),后来该制造商得到了更多的品牌笔记本电脑的订单Acer,Lenovo,Dell,该OEM商发现,如果一次同时做很多...
  • 实验名称 抽象工厂模式的应用 日期 2019年 03 月25...2) 分析具体问题,使用抽象工厂模式进行设计 麦当劳(McDonalds)和肯德基(KFC)快餐店都经营汉堡(Hamburg)和可乐(Cole),用JAVA语言实现(C#控制台应用...
  • 2) 分析具体问题,使用组合模式进行设计。 文件浏览 文件有不同类型,不同类型的文件其浏览方式有所区别,如文本文件和图片文件的浏览方式就不相同。对文件夹的浏览实际上就是对其中所包含文件的浏览,而客户端...
  • 2) 分析具体问题,使用访问者模式进行设计。 某公司OA系统中包含一个员工信息管理子系统,该公司员工包括正式员工和临时工,每周人力资源部和财务部等部门需要对员工数据进行汇总,汇总数据包括员工工...
  • 2) 分析具体问题,使用单例模式进行设计。 在操作系统中,打印池(Print Spooler)是一个用于管理打印任务的应用程序,通过打印池用户可以删除、中止或者改变打印任务的优先级,在一个系统中只允许运...
  • 2) 分析具体问题,使用建造者模式进行设计。 实例:KFC套餐 建造者模式可以用于描述KFC如何创建套餐:套餐是一个复杂对象,它一般包含主食(如汉堡、鸡肉卷等)和饮料(如果汁、可乐等)等组成部分,不同的套餐....
  • 2) 分析具体问题,使用适配器模式进行设计。 加密适配器 某系统需要提供一个加密模块,将用户信息(如密码等机密信息)加密之后再存储在数据库中,系统已经定义好了数据库操作类。为了提高开发效率,现需要重用...
  • <?xml version="1.0" encoding="utf-8" ?> <configuration> <config> <className>实验11.HelpCommand</className> <className>实验11.MinimizeCommand<...
  • 软件设计体系结构

    2014-01-25 00:56:20
    软件设计体系结构课件
  • 武汉理工大学软件设计体系结构期末复习资料
  • 非常好的课件 软件设计体系结构 软件设计体系结构 软件设计体系结构 软件设计体系结构 软件设计体系结构
  • 火龙果软件工程技术中心 摘要:本文采用嵌入式实时系统软件设计方法对星载姿轨控计算机系统进行设计,软件系统采用层次模块化结构。采用嵌入式实时操作系统连接姿轨控应用程序和底层硬件,文中给出了姿轨控计算机...
  • 软件体系结构课的大作业,对一个电商系统进行了架构设计文档化
  • 软件设计模式体系结构概述笔记1.1软件体系结构引言1.1.1软件危机的表现1.1.2软件危机的原因1.1.3解决方法1.1.4软件系统容易出现的缺点1.1.5实现软件复用的方式软件体系结构:1.2设计模式以及遵循原则1.2.1模式...
  • 山东科技大学软件设计体系结构课程设计
  • 软件体系结构课程设计
  • 什么是软件体系结构 软件体系结构的风格 体系结构设计流程 体系结构模式 体系结构文档编写
  • 对软件体系结构软件设计模式进行介绍,并提供对应的编程作业供读者练习
  • 软件体系结构设计

    2014-11-16 16:40:25
    软件体系结构
  • 软件设计体系结构ppt

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,439
精华内容 2,975
关键字:

软件设计体系结构