java常用设计模式及设计原则详解一(设计模式分类,类与类的关系表示方式)

设计模式的分类

创建型模式

创建型模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用 new 运算符直接实例化对象。这使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活。

1、 工厂模式(Factory Pattern
2、 抽象工厂模式(Abstract Factory Pattern)
3、 单例模式(Singleton Pattern)
4、 建造者模式(Builder Pattern)
5、 原型模式(Prototype Pattern)

结构型模式

结构型模式关注类和对象的组合。继承的概念被用来组合接口和定义组合对象获得新功能的方式。

1、适配器模式(Adapter Pattern)
2、桥接模式(Bridge Pattern)
3、过滤器模式(Filter、Criteria Pattern)
4、组合模式(Composite Pattern)
5、装饰器模式(Decorator Pattern)
6、外观模式(Facade Pattern)
7、享元模式(FlyweightPattern)
8、代理模式(Proxy Pattern)

行为型模式

行为型模式关注对象之间的通信。

1、责任链模式(Chain of Responsibility Pattern)
2、命令模式(Command Pattern)
3、解释器模式(Interpreter Pattern)
4、迭代器模式(Iterator Pattern)
5、中介者模式(Mediator Pattern)
6、备忘录模式(Memento Pattern)
7、观察者模式(Observer Pattern)
8、状态模式(State Pattern)
9、空对象模式(Null Object Pattern)
10、策略模式(Strategy Pattern)
11、模板模式(Template Pattern)
12、访问者模式(Visitor Pattern)

J2EE型模式

J2EE型模式特别表示层。这些模式是由 Sun Java Center 鉴定的。

1、MVC 模式(MVC Pattern)
2、业务代表模式(Business Delegate Pattern)
3、组合实体模式(Composite Entity Pattern)
4、数据访问对象模式(Data Access Object Pattern)
5、前端控制器模式(Front Controller Pattern)
6、拦截过滤器模式(Intercepting Filter Pattern)
7、服务定位器模式(Service Locator Pattern)
8、传输对象模式(Transfer Object Pattern)

类与类之间关系的表示方式

在UML类图中,类使用包含类名、属性(field) 和方法(method) 且带有分割线的矩形来表示,比如下图表示一个Employee类,它包含name,age和address这3个属性,以及work()方法。
在这里插入图片描述
属性/方法名称前加的加号和减号表示了这个属性/方法的可见性,UML类图中表示可见性的符号有三种:

+:表示public
-:表示private
#:表示protected

实例代码

/**
 * @author: 随风飘的云
 * @date 2022/03/21 16:28
 */
public class Employee {
    
    
    private String name;
    private int age;
    private String address;

    public void work(){
    
    
        System.out.println(name + "今年" + age + "岁了, " + "在"+address+"工作");
    }

    public Employee(String name, int age, String address) {
    
    
        this.name = name;
        this.age = age;
        this.address = address;
    }

    public static void main(String[] args) {
    
    
        Employee employee  = new Employee("小红", 23, "北京");
        employee.work();
    }
}

关联关系

关联关系是对象之间的一种引用关系,用于表示一类对象与另一类对象之间的联系,如老师和学生、师傅和徒弟、丈夫和妻子等。关联关系是类与类之间最常用的一种关系,分为一般关联关系、聚合关系和组合关系。

一般关联方式

1、单向关联
在这里插入图片描述
在UML类图中单向关联用一个带箭头的实线表示。上图表示每个顾客都有一个地址,这通过Customer类持有一个类型为Address的成员变量类实现。

2、双向关联
在这里插入图片描述
双向关联就是双方各自持有对方类型的成员变量。在UML类图中,双向关联用一个不带箭头的直线表示。上图中在Customer类中维护一个List< Product >,表示一个顾客可以购买多个商品;在Product类中维护一个Customer类型的成员变量表示这个产品被哪个顾客所购买。

实例代码

/**
 * @author: 随风飘的云
 * @date 2022/03/21 16:06
 */
public class Customer {
    
    
    private List<Product> products;
}
public class Product {
    
    
    private Customer customer;
}

3、自关联
在这里插入图片描述
自关联在UML类图中用一个带有箭头且指向自身的线表示。上图的意思就是Node类包含类型为Node的成员变量,也就是“自己包含自己”。

聚合关系

聚合关系是关联关系的一种,是强关联关系,是整体和部分之间的关系。聚合关系也是通过成员对象来实现的,其中成员对象是整体对象的一部分,但是成员对象可以脱离整体对象而独立存在。例如:学校与老师的关系,学校包含老师,但如果学校停办了,老师依然存在。
在这里插入图片描述
实例代码

import java.util.ArrayList;
import java.util.List;

/**
 * @author: 随风飘的云
 * @date 2022/03/21 16:17
 */
public class University {
    
    

    private List<Teacher> teachers;

    public List<Teacher> getTeachers() {
    
    
        return teachers;
    }

    public void setTeachers(List<Teacher> teachers) {
    
    
        this.teachers = teachers;
    }

    public University(List<Teacher> teachers) {
    
    
        this.teachers = teachers;
    }

    public static void main(String[] args) {
    
    
         List<Teacher> list = new ArrayList<>();
         list.add(new Teacher("小红","语文"));
         list.add(new Teacher("小明", "数学"));
         list.add(new Teacher("小江", "英语"));
         University university = new University(list);
        for (Teacher teacher : university.getTeachers()) {
    
    
            teacher.teach();
        }
    }
}
/**
 * @author: 随风飘的云
 * @date 2022/03/21 16:17
 */
public class Teacher {
    
    

    private String name;
    private String subject;

    public Teacher(String name, String subject) {
    
    
        this.name = name;
        this.subject = subject;
    }

    public String getName() {
    
    
        return name;
    }

    public void setName(String name) {
    
    
        this.name = name;
    }

    public String getSubject() {
    
    
        return subject;
    }

    public void setSubject(String subject) {
    
    
        this.subject = subject;
    }

    public void teach(){
    
    
        System.out.println(name + "老师教导"+ subject);
    }
}

结果:
在这里插入图片描述

组合关系

组合表示类之间的整体与部分的关系,但它是一种更强烈的聚合关系。在组合关系中,整体对象可以控制部分对象的生命周期,一旦整体对象不存在,部分对象也将不存在,部分对象不能脱离整体对象而存在。例如,头和嘴的关系,没有了头,嘴也就不存在了在 UML 类图中,组合关系用带实心菱形的实线来表示,菱形指向整体在这里插入代码片
在这里插入图片描述
实例代码(个人见解,如有错误,还请指出)

/**
 * @author: 随风飘的云
 * @date 2022/03/21 16:36
 */
public class Head {
    
    

    private Mouth mouth(){
    
    
        return new Mouth();
    }

    public static void main(String[] args) {
    
    
       new Head().mouth().eat();
    }
}

/**
 * @author: 随风飘的云
 * @date 2022/03/21 16:37
 */
public class Mouth {
    
    

    public void eat(){
    
    
        System.out.println("嘴巴初始化完毕!");
    }
}

结果:
在这里插入图片描述

依赖关系

依赖关系是一种使用关系,它是对象之间耦合度最弱的一种关联方式,是临时性的关联。在代码中,某个类的方法通过局部变量、方法的参数或者对静态方法的调用来访问另一个类(被依赖类)中的某些方法来完成一些职责。在 UML 类图中,依赖关系使用带箭头的虚线来表示,箭头从使用类指向被依 赖的类。下图所示是司机和汽车的关系图,司机驾驶汽车:
在这里插入图片描述
实例代码

/**
 * @author: 随风飘的云
 * @date 2022/03/21 16:56
 */
public class Driver {
    
    
    private String name;

    public void driver(Car car){
    
    
        System.out.println(name + "司机开车");
        car.move();
    }

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

    public static void main(String[] args) {
    
    
        new Driver("小红").driver(new Car());
    }
}
public class Car {
    
    
    public void move(){
    
    
        System.out.println("汽车移动了");
    }
}

结果:
在这里插入图片描述

继承关联

继承关系是对象之间耦合度最大的一种关系,表示一般与特殊的关系,是父类与子类之间的关系,是一种继承关系。在 UML 类图中,泛化关系用带空心三角箭头的实线来表示,箭头从子类指向父类。在代码实现时,使用面向对象的继承机制来实现泛化关系。例如,Student 类和 Teacher 类都是 Person 类的子类,其类图如下图所示:
在这里插入图片描述
实例代码:

/**
 * @author: 随风飘的云
 * @date 2022/03/21 17:01
 */
public class Person {
    
    
    private String name;
    private int age;

    public void speak(){
    
    
        System.out.println("我的名字是" + name + "我今年" + age + "岁了");
    }
}
public class Student extends Person{
    
    
    
    private String studentNo(){
    
    
        return "没有学生学习";
    }

    public void study(){
    
    
        System.out.println("学习中。。。。。。");
    }
}
public class Teacher {
    
    
    public void teach(){
    
    
        System.out.println("老师正在教导学生");
    }

    private String teachNo(){
    
    
        return "没有老师教学。";
    }
}

实现关系

实现关系是接口与实现类之间的关系。在这种关系中,类实现了接口,类中的操作实现了接口中所声明的所有的抽象操作。在 UML 类图中,实现关系使用带空心三角箭头的虚线来表示,箭头从实现类指向接口。例如,汽车和
船实现了交通工具。

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_46198325/article/details/123623806