UML类图
类
- 第一行:类名称
- 第二行:特性(字段或属性)
- 第三行:操作(方法或行为)
补充:
- 类名称如果是斜体字,说明此类是抽象类;
- ‘+’表示public、“-”表示private、‘#’表示protected
类与类、类与接口之间的关系
- 继承关系:空心三角形+实线来表示
- 实现接口:空心三角形+虚线来表示
- 关联关系(例如:一个类中引用到另一个类的对象的时候):实线箭头来表示
- 依赖关系(例如:一个类在构造函数里面需要另一个类的对象的时候):虚线箭头来表示
- 聚合关系(例如:雁群对象包含大雁,但是大雁不是雁群的一部分):空菱形+实线箭头
- 组合关系(例如:小鸟与翅膀,是整体与部分的关系并且翅膀与小鸟的生命周期是相同的):实心菱形+实线箭头
常见的原则
单一职责原则:
- 就一个类而言,应该仅有一个引用它变化的原因;也就是单一功能对象不能承担太多的职责
例如:这个接口功能太多;应该将登录、注册放到一个接口、打印日志方法放到一个接口、发送邮件方法放到一个接口。
public interface UserService { public void login(String username, String password); public void register(String email, String username, String password); public void logError(String msg); public void sendEmail(String email); }
开放-封闭原则(OCP):
- 软件实体(类、模块、函数)应该可以拓展,但是不可以修改;
- 例如:策略模式:增添一个具体的策略,只需要实现对应的接口即可,而不是在已有的策略上进行修改。
依赖倒置原则:
- 抽象不应该依赖细节,细节应该依赖于抽象;
- 高层模块不应该依赖底层模块。两个都应该依赖抽象;
- 也就是要针对接口设计,不要针对实现编程。
里氏代换原则:
- 子类型必须能够替换掉他们的父类型;
- 子类型重写父类型的方法,可以在不更改父类的情况下,实现对功能的拓展。
迪米特原则:
- 如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个类的某个方法的话,可以通过第三者转发这个调用。