设计模式中的类关系

1. 依赖(Dependency)

定义:一个类使用到另一个类的实例,通常是通过方法参数、局部变量等。依赖关系是最弱的关系,因为它仅仅表示类之间的临时关联。

特征:在 UML 图中,依赖关系用带箭头的虚线表示,箭头指向被依赖的类。

示例

复制代码
public class Driver {
    public void drive(Car car) {
        car.start();
    }
}
​
public class Car {
    public void start() {
        System.out.println("Car started");
    }
}

在这个例子中,Driver 类依赖于 Car 类,因为 drive 方法使用了 Car 类的对象。

2. 关联(Association)

定义:关联是一种结构关系,描述了一个对象知道另一个对象的存在,并且可以和它进行交互。一个类中存在另一个类的对象作为成员变量,这种关系可以是双向的。关联通常是长期的,是类之间的一种静态关系。

特征:在 UML 图中,关联关系用带箭头或没有箭头的实线表示,箭头指向目标类。关联可以是双向的(双箭头)或单向的(单箭头)。

示例

复制代码
public class Person {
    private Address address;
​
    public Person(Address address) {
        this.address = address;
    }
​
    public Address getAddress() {
        return address;
    }
}
​
public class Address {
    private String street;
​
    public Address(String street) {
        this.street = street;
    }
​
    public String getStreet() {
        return street;
    }
}

在这个例子中,Person 类和 Address 类之间是关联关系,Person 类持有 Address 类的引用。

3. 聚合(Aggregation)

定义:聚合是一种特殊的关联关系,它表示整体和部分之间的关系。聚合是"拥有"关系,但部分可以独立于整体存在。

特征:在 UML 图中,聚合用带有空心菱形的实线表示,菱形指向整体的一方。

示例

复制代码
public class Department {
    private List<Employee> employees;
​
    public Department() {
        this.employees = new ArrayList<>();
    }
​
    public void addEmployee(Employee employee) {
        employees.add(employee);
    }
}
​
public class Employee {
    private String name;
​
    public Employee(String name) {
        this.name = name;
    }
}

在这里,DepartmentEmployee 是聚合关系。Department 作为整体,包含了 Employee 作为部分。Employee 可以脱离 Department 单独存在。

4. 组合(Composition)

定义:组合是一种更强的聚合关系,它也描述整体和部分的关系,但部分不能独立于整体存在。当整体销毁时,部分也会被销毁。

特征:在 UML 图中,组合用带有实心菱形的实线表示,菱形指向整体的一方。

示例

复制代码
public class House {
    private List<Room> rooms;
​
    public House() {
        rooms = new ArrayList<>();
        rooms.add(new Room("Living Room"));
        rooms.add(new Room("Bedroom"));
    }
}
​
public class Room {
    private String name;
​
    public Room(String name) {
        this.name = name;
    }
}

在这个例子中,HouseRoom 是组合关系。Room 作为 House 的一部分,不能脱离 House 独立存在。

5. 实现(Implementation)

定义:实现是指一个类实现了一个接口,它必须提供接口中定义的所有方法的具体实现。

特征:在 UML 图中,实现关系用带空心箭头的虚线表示,箭头指向接口。

示例

复制代码
public interface Animal {
    void makeSound();
}
​
public class Dog implements Animal {
    public void makeSound() {
        System.out.println("Bark");
    }
}

在这个例子中,Dog 实现了 Animal 接口,这是实现关系。

6. 继承(Inheritance)

定义:继承是类与类之间的一种关系,表示一个类是另一个类的子类,它继承了父类的属性和方法。

特征:在 UML 图中,继承用带空心箭头的实线表示,箭头指向父类。

示例

复制代码
public class Animal {
    public void eat() {
        System.out.println("Animal is eating");
    }
}
​
public class Cat extends Animal {
    public void meow() {
        System.out.println("Meow");
    }
}

在这个例子中,Cat 类继承了 Animal 类,这是一种继承关系。

总结

以上代码示例展示了设计模式中的六大关系的基本形式和应用场景。这些关系帮助我们理解和设计类与类之间的连接方式,以实现良好的代码结构和模块化。理解这些关系对于掌握面向对象设计和设计模式有着重要意义。

推荐阅读

设计模式中的类关系-CSDN博客

面向对象设计原则-CSDN博客

Java之23种设计模式介绍-CSDN博客

Java之23种设计模式代码示例_java好用的设计模板编程-CSDN博客

相关推荐
码界奇点4 小时前
Java设计模式精讲从基础到实战的常见模式解析
java·开发语言·设计模式·java-ee·软件工程
Charles_go6 小时前
41、C#什么是单例设计模式
java·设计模式·c#
ZHE|张恒6 小时前
设计模式实战篇(六):装饰器模式 —— 让系统具备“可生长能力”的架构思想
设计模式·装饰器模式
孟祥_成都10 小时前
下一代组件的奥义在此!headless 组件构建思想探索!
前端·设计模式·架构
颜酱17 小时前
理解编程的设计原则(前端角度)
设计模式
Wild_Pointer.21 小时前
设计模式实战精讲:全景目录
设计模式·设计规范
一叶飘零_sweeeet1 天前
深度拆解汽车制造系统设计:用 Java + 设计模式打造高扩展性品牌 - 车型动态生成架构
java·设计模式·工厂设计模式
阿波罗尼亚1 天前
设计原则(一)Head First设计模式
设计模式
ZHE|张恒2 天前
设计模式实战篇(五):责任链模式 — 把复杂审批/过滤流程变成可组合的“传递链”
设计模式·责任链模式
CodeAmaz2 天前
使用责任链模式设计电商下单流程(Java 实战)
java·后端·设计模式·责任链模式·下单