设计模式
看懂UML类图
从一个示例开始
- 车的类图结构为<
>,表示车是一个抽象类; - 它有两个继承类:小汽车和自行车;它们之间的关系为实现关系,使用带空心箭头的虚线表示;
- 小汽车为与SUV之间也是继承关系,它们之间的关系为泛化关系,使用带空心箭头的实线表示;
- 小汽车与发动机之间是组合关系,使用带实心箭头的实线表示;
- 学生与班级之间是聚合关系,使用带空心箭头的实线表示;
- 学生与身份证之间为关联关系,使用一根实线表示;
- 学生上学需要用到自行车,与自行车是一种依赖关系,使用带箭头的虚线表示;
类之间的关系
泛化关系(generalization)
类的继承结构表现在UML中为:泛化(generalize)与实现(realize):
泛化是一种继承关系用空心箭头表示
实现是一种实现关系用空心虚线箭头表示
聚合关系(aggregation)
聚合关系用一条带空心菱形箭头的直线表示,如下图表示A聚合到B上,或者说B由A组成;
组合关系(composition)
组合关系用一条带实心菱形箭头表示,如下图A组成B;
关联关系(association)
关联关系是用一条直线表示的;它描述不同类的对象之间的结构关系;它是一种静态关系, 通常与运行状态无关,一般由常识等因素决定的;它一般用来定义对象之间静态的、天然的结构; 所以,关联关系是一种“强关联”的关系;
比如,乘车人和车票之间就是一种关联关系;学生和学校就是一种关联关系;
关联关系默认不强调方向,表示对象间相互知道;如果特别强调方向,如下图,表示A知道B,但 B不知道A;
依赖关系(dependency)
依赖关系使用一套带箭头的虚线表示;如下图表示A依赖B;他描述一个对象在运行期间会用到另一个对象的性关系;
创建型模式
简单工程模式(Simple Factory Pattern)
模式动机
考虑一个简单的软件应用场景,一个软件系统可以提供多个外观不同的按钮(如,圆形、方形、菱形),这些按钮都源自同一个基类,继承后不同的子类修改了部分属性从而使得他们可以呈现不同的外观,如果我们希望使用这些按钮时,不需要知道这些按钮类的具体名字,只需要知道表示一个按钮类的一个参数,并提供一个调用方便的方法,把该参数传入方法即可返回一个相应的按钮对象,此时就可以使用简单工厂模式。
模式定义
简单工厂模式:又称静态工厂方法模式,它属于类创建型模式。在简单工厂模式中,可根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类负责创建其他类的实例,被创建的实例通常具有共同的父类。
模式结构
简单工厂模式包含如下角色:
Factory:工厂角色
工厂角色 负责创建所有实例的内部逻辑
Product:抽象产品角色
抽象产品角色是创建所有对象的父类,负责描述所有实例所共有公共接口
ConcreteProduct:具体产品角色
具体产品角色是创建目标,所有创建的对象都充当这个角色的某个具体类的实例
使用案例
DateFormat、KeyGenerator.getInstance(“DESede”)、Cipher.getInstance(“DESede”)等
工厂方法模式(Factory Method Pattern)
模式动机
针对简单工厂模式,当按钮种类增加时,需要对工厂类进行修改;特别是种类增加到一定量时,增加开发维护难度;此时考虑将工厂方法进行抽象,具体的按钮创建交给不同的工厂子类来实现;这种改良使得整体设计更加符合“开闭原则”
模式定义
工厂方法模式又成为工厂模式,也叫虚拟构造器模式、多态工厂模式;它属于类创建型模式。在工厂方法模式中工厂类负责定义创建产品的公共接口,而工厂子类负责生成具体的产品对象,这样做的目的是产品创建延后,使具体的产品使用者不用关注产品的创建过程。
模式结构
工厂方法模式包含如下角色:
- Product 抽象产品
- ConcreteProduct 具体产品
- Factory抽象工厂
- ConcreteFactory具体工厂
使用案例
JDBC中的工厂方法
1 | //Connection创建Statemeng: |
抽象工程模式(Abstract Factory)
模式动机
在工厂方法模式中具体的工厂负责生产具体的产品,每一个具体的工厂对应一个具体的产品,工厂方法也具有唯一性,有时候我们需要一个工厂可以提供多个产品对象,而不是单一的产品对象。
模式定义
抽象工厂模式(Abstract Factory Pattern):提供一系列相关相互依赖的接口,而无需指定他们具体的类。抽象工厂模式又称Kit模式,属于对象创建型模式。
模式结构
- AbstractFactory 抽象工厂
- ConcreteFactory 具体工厂
- AbstractProduct 抽象产品
- ConcreteProduct 具体产品
建造者模式
模式动机
在软件开复杂对象中开发过程中,存在大量类似汽车一样的复杂对象,他们拥有一些列的成员属性,这些成员属性中有些是引用类型的成员对象。而在这些复杂对象中还可能存在一些限制条件,如默写属性没有复制不能做一个完整的产品使用,以及属性的初始化顺序等。
模式定义
建造者模式(Builder Pattern):将复杂的对象的构建与他的表示分离,使得同样的构建可以创造不同的表示。
建造者模式是一步步创建一个复杂对象的过程,它允许用户指定复杂对象的类型和内容j就可以构建他们,用户不需要知道内部具体的构建细节。
模式结构
建造者的模式角色包含如下角色:
- Builder:抽象建造者
- ConcreteBuilder:具体的建造者
- Director:指挥者
- Product:产品
单例模式
结构型模式
适配器模式
桥接模式
装饰模式
外观模式
享元模式
代理模式
行为型模式
命令模式
中介者模式
观察者模式
状态模式
策略模式
附录
摘自 https://design-patterns.readthedocs.io/zh_CN/latest/read_uml.html#id1