设计模式:类与类之间关系的表示方式(聚合,组合,依赖,继承,实现)

目录

聚合关系

组合关系

依赖关系

继承关系

实现关系


聚合关系

聚合是一种较弱的"拥有"关系,表示整体与部分的关系,但部分可以独立于整体存在。例如,部门和员工之间的关系,一个部门可以包含多个员工,但员工可以离开这个部门。

java 复制代码
// 员工类
class Employee {
    private String name;

    public Employee(String name) {
        this.name = name;
    }

    // 省略其他属性和方法
}

// 部门类
class Department {
    private String name;
    private List<Employee> employees; // 部门包含多个员工,聚合关系

    public Department(String name) {
        this.name = name;
        this.employees = new ArrayList<>();
    }

    public void addEmployee(Employee employee) {
        employees.add(employee);
    }

    // 省略其他属性和方法
}

UML示例:

组合关系

组合是一种较强的"拥有"关系,表示整体与部分的关系,但部分不能独立于整体存在。通常,组合关系中的部分会在整体创建时创建,并在整体销毁时销毁。例如,公司和部门之间的关系,一个公司由多个部门组成,如果公司不存在了,部门也将不存在。

java 复制代码
// 部门类
class Department {
    private String name;

    public Department(String name) {
        this.name = name;
    }

    // 省略其他属性和方法
}

// 公司类
class Company {
    private String name;
    private List<Department> departments; // 公司包含多个部门,组合关系

    public Company(String name) {
        this.name = name;
        this.departments = new ArrayList<>();
    }

    // 创建部门时,直接在Company类内部进行
    public Department createDepartment(String deptName) {
        Department department = new Department(deptName);
        departments.add(department);
        return department;
    }

    // 省略其他属性和方法
}

UML示例:

依赖关系

在Java中,依赖关系是类与类之间最弱的一种关系。当一个类的方法使用或操纵另一个类的对象时,我们就说第一个类依赖于第二个类。这种关系通常通过以下几种方式表现:

  1. 一个类的方法接收另一个类的对象作为参数。
  2. 一个类的方法返回另一个类的对象。
  3. 一个类的方法使用另一个类的对象进行某些操作。

下面是一个简单的Java代码示例,说明两个类之间的依赖关系:

java 复制代码
// Car类表示汽车,依赖于Engine类
class Car {
    // Car类的方法start需要Engine对象来启动汽车
    public void start(Engine engine) {
        if (engine != null) {
            engine.start();
            System.out.println("Car started with the engine.");
        }
    }
}

// Engine类表示发动机
class Engine {
    // Engine类的方法start用于启动发动机
    public void start() {
        System.out.println("Engine started.");
    }
}

// Main类用于演示依赖关系
public class Main {
    public static void main(String[] args) {
        // 创建Engine对象
        Engine engine = new Engine();
        
        // 创建Car对象
        Car car = new Car();
        
        // Car对象依赖于Engine对象来启动
        car.start(engine);
    }
}

UML示例:

继承关系

继承是子类继承父类的方法和属性的过程。在Java中,使用extends关键字来实现继承关系。

java 复制代码
// 父类
class Animal {
    void eat() {
        System.out.println("Animal is eating...");
    }
}

// 子类继承Animal类
class Dog extends Animal {
    void bark() {
        System.out.println("Dog is barking...");
    }
}

// 测试类
public class TestInheritance {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.eat(); // 继承自Animal类的方法
        dog.bark(); // Dog类自己的方法
    }
}

UML示例:

实现关系

实现是指一个类实现一个或多个接口的过程。接口定义了一组抽象方法,实现类必须提供这些方法的实现。在Java中,使用implements关键字来实现接口。

java 复制代码
// 定义一个接口
interface Animal {
    void eat();
}

// 实现该接口的类
class Dog implements Animal {
    public void eat() {
        System.out.println("Dog is eating...");
    }
    
    void bark() {
        System.out.println("Dog is barking...");
    }
}

// 测试类
public class TestImplementation {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.eat(); // 实现自Animal接口的方法
        dog.bark(); // Dog类自己的方法
    }
}

UML示例:

相关推荐
_哆啦A梦6 小时前
Vibe Coding 全栈专业名词清单|设计模式·基础篇(创建型+结构型核心名词)
前端·设计模式·vibecoding
holeer3 天前
【V3.0】「酒店 × 视觉AI」项目 | 需求分析说明书(软件工程概论 - 课程作业三)
人工智能·软件工程·需求分析·原型设计·总体设计·结构化设计
阿闽ooo3 天前
中介者模式打造多人聊天室系统
c++·设计模式·中介者模式
小米4963 天前
js设计模式 --- 工厂模式
设计模式
逆境不可逃4 天前
【从零入门23种设计模式08】结构型之组合模式(含电商业务场景)
线性代数·算法·设计模式·职场和发展·矩阵·组合模式
雾江流4 天前
Xtra 2.54.1 | Twitch直播第三方客户端,开源纯净无广
软件工程
驴儿响叮当20104 天前
设计模式之状态模式
设计模式·状态模式
电子科技圈4 天前
XMOS推动智能音频等媒体处理技术从嵌入式系统转向全新边缘计算
人工智能·mcu·物联网·设计模式·音视频·边缘计算·iot
徐先生 @_@|||4 天前
安装依赖三方exe/msi的软件设计模式
设计模式
张较瘦_4 天前
[论文阅读] AI + 教育 | 不是单纯看视频!软件工程培训的游戏化融合之道
论文阅读·人工智能·软件工程