网站首页 > 精选教程 正文
平时也许我们没有过多的注意到这些面试题对程序员工作的影响,但是确实是面试官经常要问的问题,以此来考核你是否使用过或者是否理解其原理。不可否认的是,如果面试前不做复习,大部分人是无法通过面试的,这就造成了面试题成了一种鸡肋,食之无味,弃之可惜。希望应聘者能遇到善解人意的面试官,也希望面试官能艺高人胆大的抛橄榄枝。
也许刚接触java时,你就已经听过设计模式这个概念了,因为设计模式本质上来说,它不是一种技术,它是一种哲学开发思维,学习设计模式的过程中也许很轻松,但难就难在你即便熟悉这个模式,你却不知道怎么用它,如何在你的代码中使用它。
所以在我们开始学习具体的设计模式之前,我们得先明白设计模式存在的意义?它所解决的是什么问题?为什么它能解决这些问题?明白这些问题,也许你学起来就会得心应手了。
设计模式的目标是为了安全,健壮,高复用,低耦合的维护或扩展大型架构系统的代码
1、开闭原则(Open Close Principle)
开闭原则的意思是:对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。简言之,是为了使程序的扩展性好,易于维护和升级。
示例:假设我们开发了一个计算器,实现了加减乘除四个算法,计算器使用一段时间之后,客户想要新增平方的算法,这个时候也许你会直接在算法类中添加一个if来做判断,这个时候出现了一个问题,你只是因为要新增功能而修改了原本运行正常的代码,这可能会带来程序异常的风险,且随着功能的增加你的算法类代码会积累越来越多不易维护,不易阅读。
2、里氏代换原则(Liskov Substitution Principle)
里氏代换原则是面向对象设计的基本原则之一。 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。LSP 是继承复用的基石,只有当派生类可以替换掉基类,且软件单位的功能不受到影响时,基类才能真正被复用,而派生类也能够在基类的基础上增加新的行为。里氏代换原则是对开闭原则的补充。实现开闭原则的关键步骤就是抽象化,而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。
示例:假设我们实现了一个跑步的方法,这个方法参数是某个人(比如小明,小红,小黑),由于方法参数和传递进来的参数类型要一致,所以参数如何设置为小明,那当你传小红时就会报错,所以你就得写三个相似的方法来对应三个参数。这显得代码特别冗余,阅读效率低下,维护难度十分高。这个时候我们选择修改小红,小明,小黑继承于Person类,Person是父类,子类继承之后也拥有父类的功能,且当参数为Person类时,该方法可以传递Person的任一子类,这就实现了同一方法传递不同子类实现不同功能。
3、依赖倒转原则(Dependence Inversion Principle)
这个原则是开闭原则的基础,具体内容:针对接口编程,依赖于抽象而不依赖于具体。
示例:依赖倒转与里氏替换类似,很多时候,父类的功能并不能满足子类,好比孩子会开车,父亲并不一定也会开车,这时便可以用接口形式来补充。同一个参数传递不同实现类来实现同方法不同功能。
4、接口隔离原则(Interface Segregation Principle)
这个原则的意思是:使用多个隔离的接口,比使用单个接口要好。它还有另外一个意思是:降低类之间的耦合度。由此可见,其实设计模式就是从大型软件架构出发、便于升级和维护的软件设计思想,它强调降低依赖,降低耦合。
示例:假设我们现在要操作一个文件的增删改查,通常情况下你会把增删改查四个方法写在同一个接口内,实现类就需要四个方法都实现,高层模块在调用实现类的时候,会发现四个功能都可以调用,但用户也许只有查询的需求而已,或者只有查询的权限而已,代码污染为开发埋下漏洞。所以我们推荐将四个方法分别放在不同接口中,以实现不同接口来实现不同方法。低耦合开发。
5、迪米特法则,又称最少知道原则(Demeter Principle)
最少知道原则是指:一个实体应当尽量少地与其他实体之间发生相互作用,使得系统功能模块相对独立。迪米特法则在运用过程中算是比较难的,哲学思想比较深刻,在我们生活中应该处处见到迪米特思想。迪米特法则告诉我们一个类只和朋友类交流,朋友类的定义是这样的:出现在成员变量、方法的输入输出参数中的类称为成员朋友类,而出现在方法体内部的类不属于朋友类。
示例:比如说打电话我们需要拨号,号码会发给基站,基站再拨给对方手机,这个号码提高到顶层模块来初始化就遵循了迪米特。这个号码使得我的手机和对方的手机是独立的,在不拨号的情况下,两部手机是没有任何联系,互不影响的。若是不遵循迪米特法则,两部手机一一对应,那我有三个朋友我就要买三部手机,这无法高效的复用手机,且由于手机间耦合太严重,对方手机坏了,我的手机也得换。
6、合成复用原则(Composite Reuse Principle)
合成复用原则是指:尽量使用合成/聚合的方式,而不是使用继承。
示例:猫肯定是继承自动物类,但是猫分白猫,黑猫,黄猫,这个时候我们是否选择白猫继承于猫呢?这样便会导致特别多的猫类,复用性和维护性极差,因为猫的属性是一样的,只是颜色不一样而已,我们可以定义一个颜色类,在动物类中引入颜色类,极大减少子类的创建。
关注小编,带你了解更多JAVA知识。祝大家面试顺利!
- 上一篇: Java设计模式(三):设计模式六大原则
- 下一篇: 设计原则总结 设计原则的概念
猜你喜欢
- 2024-11-02 Java,设计模式,七大原则,里氏替换原则(LSP),案例
- 2024-11-02 软件设计七大原则,程序员标配(一)
- 2024-11-02 设计模式七大原则 设计模式七大原则包括
- 2024-11-02 Java设计模式的精神领袖:开闭原则
- 2024-11-02 设计模式第2招第3式之命令模式 命令模式定义
- 2024-11-02 Java代码优化六大原则 java代码优化六大原则有哪些
- 2024-11-02 一天一个设计模式——软件架构设计七大原则
- 2024-11-02 专门画了9张图,搞懂设计模式6大原则,这次应该可以了吧
- 2024-11-02 程序员应知道这十大面向对象设计原则
- 2024-11-02 3张图说清楚:java设计模式原则:开闭、接口隔离、迪米特法则
你 发表评论:
欢迎- 04-11Java面试“字符串三兄弟”String、StringBuilder、StringBuffer
- 04-11Java中你知道几种从字符串中找指定的字符的数量
- 04-11探秘Java面试中问的最多的String、StringBuffer、StringBuilder
- 04-11Python字符串详解与示例(python字符串的常见操作)
- 04-11java正则-取出指定字符串之间的内容
- 04-11String s1 = new String("abc");这句话创建了几个字符串对象?
- 04-11java判断字符串中是否包含某个字符
- 04-11关于java开发中正确的发牌逻辑编写规范
- 最近发表
-
- Java面试“字符串三兄弟”String、StringBuilder、StringBuffer
- Java中你知道几种从字符串中找指定的字符的数量
- 探秘Java面试中问的最多的String、StringBuffer、StringBuilder
- Python字符串详解与示例(python字符串的常见操作)
- java正则-取出指定字符串之间的内容
- String s1 = new String("abc");这句话创建了几个字符串对象?
- java判断字符串中是否包含某个字符
- 关于java开发中正确的发牌逻辑编写规范
- windows、linux如何后台运行jar(并且显示进程名)
- 腾讯大佬私人收藏,GitHub上最受欢迎的100个JAVA库,值得学习
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)