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

简介: 软件体系结构期末考试总结(下)
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月前
|
存储
面向对象技术(第二周)
面向对象技术(第二周)
|
6月前
|
存储 数据库
面向对象技术(第一周)
面向对象技术(第一周)
|
11月前
|
Web App开发
半导体器件基础(期末模电速成)
半导体器件基础(期末模电速成)
92 2
|
存储 数据管理 人机交互
【软工视频】第九章面向对象技术
【软工视频】第九章面向对象技术
【软工视频】第七章软件维护
【软工视频】第七章软件维护
|
设计模式 XML 前端开发
软件体系结构期末考试总结(上)
软件体系结构期末考试总结
155 0
软件体系结构期末考试总结(上)
|
设计模式 数据处理
【参与评论有奖】把书读薄 | 《设计模式之美》总结篇(下)
从六月开始,断断续续,算是把王争的《设计模式之美》看得差不多了,实战部分没来得及看,不过也是获益良多,思维方式上的一些变化。肚子里的墨水不多,不知道如何描述这种感觉,说两个实际的应用场景,读者自行意会哈,顺便带出总结思维导图~
223 0
|
设计模式
【参与评论有奖】把书读薄 | 《设计模式之美》总结篇(上)
从六月开始,断断续续,算是把王争的《设计模式之美》看得差不多了,实战部分没来得及看,不过也是获益良多,思维方式上的一些变化。肚子里的墨水不多,不知道如何描述这种感觉,说两个实际的应用场景,读者自行意会哈,顺便带出总结思维导图~
226 0
|
敏捷开发 Java BI
人月神话札记:系统设计
人月神话札记:系统设计
102 0
《设计原本—计算机科学巨匠Frederick P. Brooks的反思》一一3.9 那又如何?我们的设计过程模型真的那么事关紧要吗
本节书摘来自华章出版社《设计原本—计算机科学巨匠Frederick P. Brooks的反思》一 书中的第3章,第3. 9节,作者:(美) Frederick P. Brooks, Jr. 著 ,更多章节内容可以访问云栖社区“华章计算机”公众号查看
995 0

相关实验场景

更多