最全【设计模式一】七大原则、UML类图、设计模式分类,一文轻松搞定

总结

这份面试题几乎包含了他在一年内遇到的所有面试题以及答案,甚至包括面试中的细节对话以及语录,可谓是细节到极致,甚至简历优化和怎么投简历更容易得到面试机会也包括在内!也包括教你怎么去获得一些大厂,比如阿里,腾讯的内推名额!

某位名人说过成功是靠99%的汗水和1%的机遇得到的,而你想获得那1%的机遇你首先就得付出99%的汗水!你只有朝着你的目标一步一步坚持不懈的走下去你才能有机会获得成功!

成功只会留给那些有准备的人!

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 编程中遵循其它原则,以及使用设计模式的目的就是遵循开闭原则

6、迪米特原则


Demeter Principle

又叫最少知道原则

  • 一个对象应该对其他对象保持最少的了解

  • 类与类关系越密切,耦合度越大

  • 又叫最少知道原则,即一个类对自己依赖的类知道的越少越好。也就是说,对于被依赖的类不管多么复杂,都尽量将逻辑封装在类的内部。对外除了提供的 public 方法,不对外泄露任何信息

  • 迪米特法则还有个更简单的定义:只与直接的朋友通信

直接的朋友:每个对象都会与其他对象有耦合关系,只要两个对象之间有耦合关系,我们就说这两个对象之间是朋友关系。耦合的方式很多,依赖,关联,组合,聚合等。其中,我们称出现成员变量,方法参数,方法返回值中的类为直接的朋友,而出现在局部变量中的类不是直接的朋友。也就是说,陌生的类最好不要以局部变量的形式出现在类的内部

  • 核心是降低类之间的耦合

  • 但是注意:由于每个类都减少了不必要的依赖,因此迪米特法则只是要求降低类间(对象间)耦合关系,并不是要求完全没有依赖关系

7、合成复用原则


Composite Reuse Principle

composite [kəmˈpɑːzət] 合成、组合

reuse [ˌriːˈjuːs , ˌriːˈjuːz] 重复、再用

  • 尽量使用组合/聚合的方式,而不是使用继承

8、核心思想


  • 找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起

  • 针对接口编程,而不是针对实现编程

  • 为了交互对象之间的松耦合设计而努力

二、UML类图

=======

1、基本介绍


UML —— Unified Modeling Language UML (统一建模语言),是一种用于软件系统分析和设计的语言工具,它用于帮助软件开发人员进行思考和记录思路的结果

2、UML图


画UML图与写文章差不多,都是把自己的思想描述给别人看,关键在于思路和条理

UML图分类:

  • 用例图 (use case)

  • 静态结构图:类图、对象图、包图、组件图、部署图

  • 动态行为图:交互图(时序图与协作图)、状态图、活动图

3、UML类图


  • 用于描述系统中的类(对象)本身的组成和类(对象)之间的各种静态关系

  • 类之间的关系:依赖、泛化(继承)、实现、关联、聚合与组合

  • 类中属性的访问权限表示:

  • public +

  • protected #

  • private -

4、继承和实现


1)继承(Inheritance)

继承也称为 泛化

Inheritance [ɪnˈherɪtəns] 继承

generalization [ˌdʒenrələˈzeɪʃn] 泛化

  • Inheritance表示一个类(接口)继承另一个类(接口)的功能和属性,用于描述父类(接口)和子类(接口)之间的关系

  • 继承描述了"is a kind of "关系,例如:Manger是Employee的一种,Manager继承了Employee的所有功能(例如:刷卡签到、执行工作)和属性(例如:员工姓名、入职时间)。

在UML中,继承使用 实线 空心箭头 表示,空心箭头指向父类(接口)

2)实现(Realization)

Realization [ˌriːələˈzeɪʃn] 实现

Implementation [ˌɪmpləmɛnˈteɪʃən] 实施;执行;

Implementation表示类实现接口的功能。

在UML中,继承使用 虚线 空心箭头 表示,空心箭头指向接口

3)继承和实现的区别

虽然在C#中继承和实现都使用符号:来表示(java中使用extends表示继承,implements表示实现),但二者还是有些区别的。

1. 继承发生在“类和类”或“接口和接口”之间,例如:子类继承父类,子接口继承父接口。

子类继承父类:

public abstract class Animal

{

}

public class Bird : Animal

{

}

子接口继承父接口:

public interface ITransportation

{

void Move();

}

public interface IVehicle : ITransportation

{

}

2. 实现发生在“类和接口”之间,例如:类实现某个接口的方法。

public interface IVehicle : ITransportation

{

}

public class Car : IVehicle

{

public void Move()

{

Console.WriteLine(“汽车跑起来…”);

}

}

3. 在C#中,多继承确切地说是多实现。

不像C++语言的语法,C#的类不能同时继承多个类。C#仅能继承一个类,但可以同时实现多个接口。

例如:ASP.NET MVC中的Controller类,继承了ControllerBase类,同时实现了IActionFilter, IAuthenticationFilter…等接口。

| 区别 | 继承 | 实现 |

| — | — | — |

| 符号 | 实线 空心三角箭头 | 虚线 空心三角箭头 |

| 耦合度 | 高 | 低 |

| 涉及对象 | 类与类、接口与接口 | 类与接口 |

| java关键字 | extends | implements |

5、依赖、关联、聚合和组合


1)依赖(Dependency)

[dɪˈpendənsi]

  • 依赖关系是对象之间最基本的关系

  • 当一个对象(调用者)需要调用另外一个对象(被调用者)的方法去完成某些工作时,依赖关系就建立了

在UML中,依赖关系使用 虚线 箭头 表示,箭头指向被依赖的一方。

例如:在Web Service中,Client需要调用Service的操作,这就表示Client依赖于Service。

2)关联(Association)

[əˌsoʊsiˈeɪʃn]

  • Association表示多个对象之间的关联关系

  • 每个对象都有自己的生命周期,对象之间不存在从属关系。

在UML中,关联关系使用一条 直线 表示。

例如:Student和Teacher之间就属于”Association”,多个Student可以关联到一个Teacher,一个Student也可以关联到多个Teacher。

但是Teacher和Student之间没有“从属”或“包含”关系

3)聚合(Aggregation)

aggregation [ˌæɡrɪˈɡeɪʃn] 聚集

segregation [ˌseɡrɪˈɡeɪʃn] 隔离

  • Aggregation体现的是整体和部分之间的关系,即“has-a”关系

  • 整体和部分是可以分离的,即整体和部分都可以拥有各自的生命周期

在UML中,聚合关系使用 空心菱形箭头 表示,箭头指向整体

例如:一个 Department 拥有多个 Employee,Department 作为整体,Department 中的 Employee 是 Department 的一部分。

Department 和 Employee 都有自己的生命周期,当一个 Department 被撤销时,Employee 可以转到其他 Department 或离职了。

Employee 转到其他 Department 或离职时,Department 仍然是存在的

4)组合(Composition)

[ˌkɑːmpəˈzɪʃn]

  • Composition体现的也是整体和部分之间的关系,即“is-a”关系

  • 组合关系是更为强力的聚合关系,整体和部分是不可以分离的

  • 整体的生命周期结束时,也意味着部分的生命周期结束

学习分享,共勉

这里是小编拿到的学习资源,其中包括“中高级Java开发面试高频考点题笔记300道.pdf”和“Java核心知识体系笔记.pdf”文件分享,内容丰富,囊括了JVM、锁、并发、Java反射、Spring原理、微服务、Zookeeper、数据库、数据结构等大量知识点。同时还有Java进阶学习的知识笔记脑图(内含大量学习笔记)!

资料整理不易,读者朋友可以转发分享下!

Java核心知识体系笔记.pdf

记一次蚂蚁金服Java研发岗的面试经历,分享下我的复习笔记面经

中高级Java开发面试高频考点题笔记300道.pdf

记一次蚂蚁金服Java研发岗的面试经历,分享下我的复习笔记面经

架构进阶面试专题及架构学习笔记脑图

记一次蚂蚁金服Java研发岗的面试经历,分享下我的复习笔记面经

Java架构进阶学习视频分享

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

大量学习笔记)!**

资料整理不易,读者朋友可以转发分享下!

Java核心知识体系笔记.pdf

[外链图片转存中…(img-wtFMWJB7-1715590446258)]

中高级Java开发面试高频考点题笔记300道.pdf

[外链图片转存中…(img-APVJjD9F-1715590446258)]

架构进阶面试专题及架构学习笔记脑图

[外链图片转存中…(img-S4vrSCIW-1715590446259)]

Java架构进阶学习视频分享

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 13
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值