定义:一系列按照特定顺序组织的计算机数据、指令的集合
特点:
- 软件不是生产制造,是设计开发
- 软件不会磨损和老化
- 软件需要根据实际情况进行定制开发
体系结构
程序构件的结构或组织、这些构件交互的形式以及这些构件所用数据的结构。
定义:软件系统的基本组织,包含构件、构件之间、构件与环境之间的关系,以及相关的设计与进化原则等
四个研究领域
也可称为过程模型和函数模型,是模型化软件结构方法中的第一个基本模型
以对象为核心,通过对象进行对数据组织的抽象并实现数据组织和数据处理的统一,并在此基础上建立面向对象软件构造方法
在对象模型的基础上强调了异族对象关系以及独立性问题
又称服务器组件模型,专门针对应用服务器,定义其基于组件的基础结构模型
服务由数据、业务逻辑、接口及服务描述构成
对软件系统的简化和概括,提供了对系统组成和行为的高层次描述
非形式化描述
统一建模语言(UML):
优点:在系统开发的各个阶段具有一致性,可以面向各种应用领域系统建模
形式化描述
关注的是使用意图,而缺乏必要的规范定义
含义:一种用于描述软件与系统结构的计算机语言
要素:构件、操作、模式、闭包、规格说明
统一建模语言(UML):
优点:在系统开发的各个阶段具有一致性,可以面向各种应用领域系统建模
特点:
抽象类和接口的区别

领域特定的软件体系结构(DSSA)是领域工程的核心部分。
领域特定的软件体系结构借鉴领域中已经成熟的软件体系结构,实现解决方案在某个领域内的复用。
人们在开发某些类型软件过程中积累起来的组织规则和结构,形成了软件体系结构风格。
软件体系结构风格是描述某一特定应用领域中系统组织方式的惯用模式。
定义:
特征
优点
定义
特点
仓库风格:
黑板风格:一种特殊的仓库风格
MVC(模型-视图-控制器) 模式:
系统被划分为客户端和服务器端两个角色,客户端发送请求给服务器端,服务器端处理请求并返回响应
优点:
缺点:
在二层中加了一层应用服务器
将系统按照职责划分为客户端、应用服务器和数据库服务器三个层次
优点:
B/S模式第一层客户机的主体是浏览器。第二层Web服务器是实现B/S结构的关键。
面向对象的思想设计软件开发的各个阶段,
- 面向对象的分析(OOA)
- 面向对象的设计(OOD)
- 面向对象的编程实现(OOP)
设计模式的核心思想是总结和积累前人成功的设计经验,通过对这些经验的学习,使得人们在面对新的设计问题时,不用再重复所有的环节,而是尽量套用已有的模式实施,以提高编程的效率。模式是解决特定问题的经验,其实质是软件的复用。
模式由特定的环境,问题、解决方案三个要素组成,按照软件开发的层次可以分为体系结构模式、设计模式、程序模式,体系结构模式属于层次较高的模式,如MVC。
设计模式是对被用来在特定场景下解决一般设计问题的类和相互通信的对象的描述。基本设计模式共23种。
根据目的的不同,将 23 种设计模式分为 三 种
- 创建型模式:主要用于创建对象
- 结构型模式:主要用于处理类和对象的组合
- 行为型模式:主要用于描述对类或对象怎么样交互和怎样分配职责


简单工厂模式
定义:定义一个类来负责创建其他类的实例,又称静态工厂方法模式,属于类的创建型模式
// 产品接口
interface Product {
void operation();
}
// 具体产品类A
class ConcreteProductA implements Product {
@Override
public void operation() {
System.out.println("具体产品A的操作");
}
}
// 具体产品类B
class ConcreteProductB implements Product {
@Override
public void operation() {
System.out.println("具体产品B的操作");
}
}
// 简单工厂类
class SimpleFactory {
public Product createProduct(String productType) {
if (productType.equals("A")) {
return new ConcreteProductA();
} else if (productType.equals("B")) {
return new ConcreteProductB();
} else {
throw new IllegalArgumentException("无效的产品类型");
}
}
}
// 客户端代码
public class Client {
public static void main(String[] args) {
SimpleFactory factory = new SimpleFactory();
Product productA = factory.createProduct("A");
productA.operation(); // 输出:具体产品A的操作
Product productB = factory.createProduct("B");
productB.operation(); // 输出:具体产品B的操作
}
}
工厂方法模式
定义:对简单工程模式进行了抽象和推广,具体的生产工作推延到其子类去完成
将对象的创建委托给具体的工厂类,从而使得客户端代码与具体的产品类解耦。
// 产品接口
interface Product {
void operation();
}
// 具体产品类A
class ConcreteProductA implements Product {
@Override
public void operation() {
System.out.println("具体产品A的操作");
}
}
// 具体产品类B
class ConcreteProductB implements Product {
@Override
public void operation() {
System.out.println("具体产品B的操作");
}
}
// 抽象工厂类
abstract class AbstractFactory {
public abstract Product createProduct();
}
// 具体工厂类A
class ConcreteFactoryA extends AbstractFactory {
@Override
public Product createProduct() {
return new ConcreteProductA();
}
}
// 具体工厂类B
class ConcreteFactoryB extends AbstractFactory {
@Override
public Product createProduct() {
return new ConcreteProductB();
}
}
// 客户端代码
public class Client {
public static void main(String[] args) {
AbstractFactory factoryA = new ConcreteFactoryA();
Product productA = factoryA.createProduct();
productA.operation(); // 输出:具体产品A的操作
AbstractFactory factoryB = new ConcreteFactoryB();
Product productB = factoryB.createProduct();
productB.operation(); // 输出:具体产品B的操作
}
}
抽象工厂模式
定义:提供了一个接口用于创建一系列相关对象,而无需指定具体的实现类。
// 抽象产品接口A
interface AbstractProductA {
void operationA();
}
// 具体产品类A1
class ConcreteProductA1 implements AbstractProductA {
@Override
public void operationA() {
System.out.println("具体产品A1的操作");
}
}
// 具体产品类A2
class ConcreteProductA2 implements AbstractProductA {
@Override
public void operationA() {
System.out.println("具体产品A2的操作");
}
}
// 抽象产品接口B
interface AbstractProductB {
void operationB();
}
// 具体产品类B1
class ConcreteProductB1 implements AbstractProductB {
@Override
public void operationB() {
System.out.println("具体产品B1的操作");
}
}
// 具体产品类B2
class ConcreteProductB2 implements AbstractProductB {
@Override
public void operationB() {
System.out.println("具体产品B2的操作");
}
}
// 抽象工厂类
interface AbstractFactory {
AbstractProductA createProductA();
AbstractProductB createProductB();
}
// 具体工厂类1
class ConcreteFactory1 implements AbstractFactory {
@Override
public AbstractProductA createProductA() {
return new ConcreteProductA1();
}
@Override
public AbstractProductB createProductB() {
return new ConcreteProductB1();
}
}
// 具体工厂类2
class ConcreteFactory2 implements AbstractFactory {
@Override
public AbstractProductA createProductA() {
return new ConcreteProductA2();
}
@Override
public AbstractProductB createProductB() {
return new ConcreteProductB2();
}
}
// 客户端代码
public class Client {
public static void main(String[] args) {
AbstractFactory factory1 = new ConcreteFactory1();
AbstractProductA productA1 = factory1.createProductA();
AbstractProductB productB1 = factory1.createProductB();
productA1.operationA(); // 输出:具体产品A1的操作
productB1.operationB(); // 输出:具体产品B1的操作
AbstractFactory factory2 = new ConcreteFactory2();
AbstractProductA productA2 = factory2.createProductA();
AbstractProductB productB2 = factory2.createProductB();
productA2.operationA(); // 输出:具体产品A2的操作
productB2.operationB(); // 输出:具体产品B2的操作
}
}
单例模式(*)

概念:保证某个类有且仅有一个实例
目的:保证应用只有一个全局唯一的实例,并且提供一个访问它的全局访问点
饿汉式
public class Singleton {
private static Singleton instance = new Singleton();
private Singleton() {}
public static Singleton getInstance() {
return instance;
}
}
懒汉式
public class Singleton {
private static Singleton instance;
private Singleton() {}
public static synchronized Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
枚举
public enum Singleton {
INSTANCE;
// 添加其他属性和方法
private String name;
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
public class Main {
public static void main(String[] args) {
Singleton singleton = Singleton.INSTANCE;
singleton.setName("Singleton Instance");
System.out.println(singleton.getName()); // 输出:Singleton Instance
}
}
原型模式
建造者模式
适配器模式
桥接模式
目的:将抽象部分与实现部分分离,使它们可以独立地变化。
桥接模式通过组合关系而不是继承关系来连接抽象和实现
优点:
缺点
// 实现部分的接口
interface Implementor {
void operationImpl();
}
// 具体实现类A
class ConcreteImplementorA implements Implementor {
public void operationImpl() {
System.out.println("Concrete Implementor A");
}
}
// 具体实现类B
class ConcreteImplementorB implements Implementor {
public void operationImpl() {
System.out.println("Concrete Implementor B");
}
}
// 抽象部分的接口
abstract class Abstraction {
protected Implementor implementor;
protected Abstraction(Implementor implementor) {
this.implementor = implementor;
}
abstract void operation();
}
// 扩展抽象部分的类A
class RefinedAbstractionA extends Abstraction {
protected RefinedAbstractionA(Implementor implementor) {
super(implementor);
}
void operation() {
System.out.println("Refined Abstraction A");
implementor.operationImpl();
}
}
// 扩展抽象部分的类B
class RefinedAbstractionB extends Abstraction {
protected RefinedAbstractionB(Implementor implementor) {
super(implementor);
}
void operation() {
System.out.println("Refined Abstraction B");
implementor.operationImpl();
}
}
// 客户端代码
public class Client {
public static void main(String[] args) {
Implementor implementorA = new ConcreteImplementorA();
Abstraction abstractionA = new RefinedAbstractionA(implementorA);
abstractionA.operation();
Implementor implementorB = new ConcreteImplementorB();
Abstraction abstractionB = new RefinedAbstractionB(implementorB);
abstractionB.operation();
}
}
适用场景
组合模式
装饰模式
外观模式
享元模式
代理模式
描述算法及对象之间的任务职责分配,所描述的不仅仅是类或对象的设计模式,还有之间的通信模式。

SOLID
- 定义:通过 Web 接口提供的某个功能程序段
- 特点:
- 平台无关性
- 通用的通信信道
- 企业的互操作性
- 功能复用
- 拓展业务
- 服务器的中立性
- 安全的通信
EJB 是基于分布式事务吃力的企业级应用程序的组件。EJB是用于开发和部署多层结构的、分布式的、面向对象的Java应用系统的跨平台构件体系结构。