软件体系结构期末考试总结(下)

简介: 软件体系结构期末考试总结(下)
public class SingleObject { //创建 SingleObject 的一个对象 private static SingleObject instance = new SingleObject(); //让构造函数为 private,这样该类就不会被实例化 private SingleObject(){} //获取唯一可用的对象 public static SingleObject getInstance(){ return instance; } public void showMessage(){ System.out.println(“Hello World!”); } }
public class SingletonPatternDemo { public static void main(String[] args) { //获取唯一可用的对象 SingleObject object = SingleObject.getInstance(); //显示消息 object.showMessage(); } }
public class SingleObject { 
//创建 SingleObject 的一个对象 
  private static SingleObject instance = new SingleObject(); 
//让构造函数为 private,这样该类就不会被实例化 
  private SingleObject(){} 
//获取唯一可用的对象 
  public static SingleObject getInstance(){ 
    return instance; 
  } 
  public void showMessage(){
  System.out.println("Hello World!"); 
  } 
}
public class SingletonPatternDemo { 
  public static void main(String[] args) { 
//获取唯一可用的对象 
  SingleObject object = SingleObject.getInstance(); 
//显示消息 
  object.showMessage(); 
  } 
}


抽象工厂模式:

提供一个接口,可以创建一系列相关或相互依赖的对象,而无需指定它们具体的类



20191230230648679.png


AbstractFactory:抽象工厂,声明抽象产品的方法


ConcreteFactory:具体工厂,执行生成抽象产品的方法,生成一个具体的产品


AbstractProduct:抽象产品,为一种产品声明接口


Product:具体产品,定义具体工厂生成的具体产品的对象,实现产品接口


Client:客户,应用程序使用抽象产品和抽象工厂生成对象

/* 抽象工厂的抽象类,Java定义为接口*/
public interface AbstractFactory {
    //创建产品的方法
    public AbstractProductA  CreateProductA();
    public AbstractProductB  CreateProductB();
}
/*抽象产品接口*/
public interface AbstractProductA {
}
public interface AbstractProductB {
}
/*实际的产品*/
public class ProductA1 implements AbstractProductA {
    //实际的产品A1
}
public class ProductA2 implements AbstractProductA {
    //实际的产品A2
}
public class ProductB1 implements AbstractProductB {
    //实际的产品B1
}
public class ProductB2 implements AbstractProductB {
    //实际的产品B2
}
/*在以下程序中,CFactory是ConcreteFactory的简写*/
/*在第1个车间中,创建实际产品A1*/
public class CFactory1 implements AbstractFactory {
    public AbstractProductA  CreateProductA() {
        return new ProductA1();
    }
}
/*在第1个车间中,创建实际产品B1*/
public class CFactory1 implements AbstractFactory {
    public AbstractProductB  CreateProductB() {
        return new ProductB1();
    }
}
/*在第2个车间中,创建实际产品A2*/
public class CFactory2 implements AbstractFactory {
    public AbstractProductA  CreateProductA() {
        return new ProductA2();
    }
}
/*在第2个车间中,创建实际产品B2*/
public class CFactory2 implements AbstractFactory {
    public AbstractProductB  CreateProductB() {
        return new ProductB2();
    }
}


观察者模式:

定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新


image.png




抽象主题(Subject)角色:也叫抽象目标类,它提供了一个用于保存观察者对象的聚集类和增加、删除观察者对象的方法,以及通知所有观察者的抽象方法。


具体主题(Concrete Subject)角色:也叫具体目标类,它实现抽象目标中的通知方法,当具体主题的内部状态发生改变时,通知所有注册过的观察者对象。


抽象观察者(Observer)角色:它是一个抽象类或接口,它包含了一个更新自己的抽象方法,当接到具体主题的更改通知时被调用。


具体观察者(Concrete Observer)角色:实现抽象观察者中定义的抽象方法,以便在得到目标的更改通知时更新自身的状态。


import java.util.*;
public class ObserverPattern
{
    public static void main(String[] args)
    {
        Subject subject=new ConcreteSubject();
        Observer obs1=new ConcreteObserver1();
        Observer obs2=new ConcreteObserver2();
        subject.add(obs1);
        subject.add(obs2);
        subject.notifyObserver();
    }
}
//抽象目标
abstract class Subject
{
    protected List<Observer> observers=new ArrayList<Observer>();   
    //增加观察者方法
    public void add(Observer observer)
    {
        observers.add(observer);
    }    
    //删除观察者方法
    public void remove(Observer observer)
    {
        observers.remove(observer);
    }   
    public abstract void notifyObserver(); //通知观察者方法
}
//具体目标
class ConcreteSubject extends Subject
{
    public void notifyObserver()
    {
        System.out.println("具体目标发生改变...");
        System.out.println("--------------");       
        for(Object obs:observers)
        {
            ((Observer)obs).response();
        }
    }          
}
//抽象观察者
interface Observer
{
    void response(); //反应
}
//具体观察者1
class ConcreteObserver1 implements Observer
{
    public void response()
    {
        System.out.println("具体观察者1作出反应!");
    }
}
//具体观察者1
class ConcreteObserver2 implements Observer
{
    public void response()
    {
        System.out.println("具体观察者2作出反应!");
    }
}


组合模式:

将对象组合成树型结构以表示“整体-部分”的层次结构,使得用户对单个对象和组合对象的使用具有一致性


20191230231114766.png



我们有一个类 Employee,该类被当作组合模型类。CompositePatternDemo,我们的演示类使用 Employee 类来添加部门层次结构,并打印所有员工。

import java.util.ArrayList;
import java.util.List;
public class Employee {
   private String name;
   private String dept;
   private int salary;
   private List<Employee> subordinates;
   //构造函数
   public Employee(String name,String dept, int sal) {
      this.name = name;
      this.dept = dept;
      this.salary = sal;
      subordinates = new ArrayList<Employee>();
   }
   public void add(Employee e) {
      subordinates.add(e);
   }
   public void remove(Employee e) {
      subordinates.remove(e);
   }
   public List<Employee> getSubordinates(){
     return subordinates;
   }
   public String toString(){
      return ("Employee :[ Name : "+ name 
      +", dept : "+ dept + ", salary :"
      + salary+" ]");
   }   
}
import java.util.ArrayList;
import java.util.List;
public class Employee {
   private String name;
   private String dept;
   private int salary;
   private List<Employee> subordinates;
   //构造函数
   public Employee(String name,String dept, int sal) {
      this.name = name;
      this.dept = dept;
      this.salary = sal;
      subordinates = new ArrayList<Employee>();
   }
   public void add(Employee e) {
      subordinates.add(e);
   }
   public void remove(Employee e) {
      subordinates.remove(e);
   }
   public List<Employee> getSubordinates(){
     return subordinates;
   }
   public String toString(){
      return ("Employee :[ Name : "+ name 
      +", dept : "+ dept + ", salary :"
      + salary+" ]");
   }   
}

9. 中间件概念:


中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源,中间件位于操作系统之上,管理计算资源和网络通信,实现应用之间的互操作。


10. 中间件功能:


(1) 负责客户机与服务器之间的连接和通信,以及客户机与应用层之间的高效率通信机制。


(2) 提供应用层不同服务之间的互操作机制,以及应用层与数据库之间的连接和控制机制。


(3) 提供一个多层体系结构的应用开发和运行的平台,以及一个应用开发框架,支持模块化的应用开发。


(4) 屏蔽硬件、操作系统、网络和数据库的差异。


(5) 提供应用的负载均衡和高可用性、安全机制与管理功能,以及交易管理机制,保证交易的一致性。


(6) 提供一组通用的服务去执行不同的功能,避免重复的工作和使应用之间可以协作。


11. 消息中间件定义和使用场景:


(1)定义:消息中间件属于分布式系统中一个子系统,关注于数据的发送和接收,利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进程间的通信。


(2)使用场景:


四个典型场景:典型的异步处理、应用解耦、流量削锋、消息通讯四个场景。


举例:秒杀活动,一般会因为流量过大,导致流量暴增,应用挂掉。为解决这个问题,一般需要在应用前端加入消息队列。(流量削锋)


11.常用消息中间件:


ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ。


12.I/O模型:


(1)阻塞I/O模型:进程或线程等待某个条件,如果条件不满足,则一直等下去。条件满足,则进行下一步操作。

20191230231349231.jpg


(2)非阻塞I/O模型:应用进程与内核交互,目的未达到时,不再一味的等着,而是直接返回。然后通过轮询的方式,不停的去问内核数据准备好没。


20191230231427520.jpg


(3)I/O 复用模型

一个进程能同时等待多个文件描述符,而这些文件描述符(套接字描述符)其中的任意一个进入读就绪状态,select()函数就可以返回。

20191230231548354.jpg


(4)信号驱动式 I/O 模型


首先开启Socket信号驱动I/O功能,并通过系统调用sigaction执行一个信号处理函数(此系统调用立即返回,进程继续工作,它是非阻塞的)。当数据准备就绪时,就为进程生成一个SIGIO信号,通过信号会掉通知应用程序调用recvfrom来读取数据,并通知主循环函数来处理数据。



20191230231611107.jpg


(5)异步 I/O 模型

告知内核启动某个操作,并让内核在整个操作完成后(包括将数据从内核复制到用户自己的缓冲区)通知开发者。



20191230231703717.jpg



第十一章


1. *软件质量属性:*


性能、可靠性(容错,健壮性),可用性,安全性,可修改性(可维护性,可扩展性,结构重组,可移植性),功能性,可变性,继承性,互操作性。


2. *评估的主要方式:*


基于调查问卷或检查表的评估方式,基于场景的评估方式,基于度量的评估方式


3. *ATAM评估步骤:*


描述ATAM方法;描述业务动机;描述架构;确定架构方法;生成质量属性效用树;分析架构方法;讨论场最和对场景分级.;分析架构方法;描述评估结果。


4. *SAAM评估步骤:*


形成场景、描述体系结构、对场景进行分类和确定优先级、对间接场景进行单个评估、评估场景的相互作用、形成总体评价


第十三章


1.软件产品线定义:产品线是一个产品集合,这些产品共享一个公共的、可管理的特征集,这个特征集能满足选定的市场或任务领域的特定需求。这些系统遵循一个预描述的方式,在公共的核心资源基础上开发的


检查表的评估方式,基于场景的评估方式,基于度量的评估方式


3. *ATAM评估步骤:*


描述ATAM方法;描述业务动机;描述架构;确定架构方法;生成质量属性效用树;分析架构方法;讨论场最和对场景分级.;分析架构方法;描述评估结果。


4. *SAAM评估步骤:*


形成场景、描述体系结构、对场景进行分类和确定优先级、对间接场景进行单个评估、评估场景的相互作用、形成总体评价


第十三章


1.软件产品线定义:产品线是一个产品集合,这些产品共享一个公共的、可管理的特征集,这个特征集能满足选定的市场或任务领域的特定需求。这些系统遵循一个预描述的方式,在公共的核心资源基础上开发的

目录
相关文章
|
6月前
|
存储
面向对象技术(第二周)
面向对象技术(第二周)
软工视频总结(一)
特点:逻辑实体(抽象,就好比一个黑盒里面有很强的逻辑代码)、无制造过程(用户不用经历制造过程,直接应用程序就可以了)、无老化、依赖硬件、手工、实际问题、逻辑复杂、昂贵、涉及社会(知识产权)。
|
测试技术
|
测试技术 BI uml
[软件工程导论(第六版)]第9章 面向对象方法学引论(课后习题详解)
[软件工程导论(第六版)]第9章 面向对象方法学引论(课后习题详解)
软工视频总结(二)
设计过程:定规范、总设计、处方设计、数据结构设计、可靠性设计、编概要设计文档、概要设计评审
|
测试技术
软工视频——软件维护(软件维护申请报告)
维护过程中,需花费大量工作量,影响软件维护成本
|
测试技术 数据库管理
【软工视频】第一二章
【软工视频】第一二章
|
存储 数据管理 人机交互
【软工视频】第九章面向对象技术
【软工视频】第九章面向对象技术
|
设计模式 XML 前端开发
软件体系结构期末考试总结(上)
软件体系结构期末考试总结
152 0
软件体系结构期末考试总结(上)
|
图形学
入行3D建模难不难学习?10年建模师:这3种人,一辈子都学不会
下面这些问题是不是也是你心中所惑?还是说经常听到有人这么说? 这个功能在哪里,我不会呀! 为什么我努力学习了这么久,还是没学会? **这个时代,最不缺的就是勤奋的年轻人。** 大家都希望用宝贵的青春奋力一搏,高山仰止。所以我们经常看到许多人,每天像吃饭一样大口吞咽知识,然而却消化不良。
215 0
入行3D建模难不难学习?10年建模师:这3种人,一辈子都学不会