设计模式一套被反复使用,多数人知晓的代码设计经验的总结,实现可重用代码,使代码更容易被理解,保证代码可靠性。

总体来说,设计模式分为三大类:

创建型模式(五种):工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式

结构型模式(七种):适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式

行为型模式(十一种):策策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

常见的设计模式介绍:

1、单例模式

意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点。

主要解决:一个全局使用的类频繁地创建与销毁。

何时使用:当您想控制实例数目,节省系统资源的时候。

如何解决:判断系统是否已经有这个单例,如果有则返回,如果没有则创建。

关键代码:构造函数是私有的。

应用实例: 1、一个党只能有一个书记。 2、Windows 是多进程多线程的,在操作一个文件的时候,就不可避免地出现多个进程或线程同时操作一个文件的现象,所以所有文件的处理必须通过唯一的实例来进行。 3、一些设备管理器常常设计为单例模式,比如一个电脑有两台打印机,在输出的时候就要处理不能两台打印机打印同一个文件。

优点: 1、在内存里只有一个实例,减少了内存的开销,尤其是频繁的创建和销毁实例(比如管理学院首页页面缓存)。 2、避免对资源的多重占用(比如写文件操作)。

缺点:没有接口,不能继承,与单一职责原则冲突,一个类应该只关心内部逻辑,而不关心外面怎么样来实例化。

使用场景: 1、要求生产唯一序列号。 2、WEB 中的计数器,不用每次刷新都在数据库里加一次,用单例先缓存起来。 3、创建的一个对象需要消耗的资源过多,比如 I/O 与数据库的连接等。

注意事项:getInstance() 方法中需要使用同步锁 synchronized (Singleton.class) 防止多线程同时进入造成 instance 被多次实例化。

2、工厂模式

在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。

意图:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。

主要解决:主要解决接口选择的问题。

何时使用:我们明确地计划不同条件下创建不同实例时。

如何解决:让其子类实现工厂接口,返回的也是一个抽象的产品。

关键代码:创建过程在其子类执行。

3、抽象工厂模式

抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。

意图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

主要解决:主要解决接口选择的问题。

何时使用:系统的产品有多于一个的产品族,而系统只消费其中某一族的产品。

如何解决:在一个产品族里面,定义多个产品。

关键代码:在一个工厂里聚合多个同类产品。

4、观察者模式

当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象。观察者模式属于行为型模式。

意图:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。

主要解决:一个对象状态改变给其他对象通知的问题,而且要考虑到易用和低耦合,保证高度的协作。

何时使用:一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知,进行广播通知。

如何解决:使用面向对象技术,可以将这种依赖关系弱化。

关键代码:在抽象类里有一个 ArrayList 存放观察者们。

常见设计模式笔试面试题相关推荐

  1. Java常见基础笔试+面试题

    Java常见基础面试题总结 原:https://blog.csdn.net/qq_16633405/article/details/79211002 1.什么是Java虚拟机?为什么Java被称作是& ...

  2. 数据库基础(面试常见题)笔试面试题

    一.数据库基础 1. 数据抽象:物理抽象.概念抽象.视图级抽象,内模式.模式.外模式 2. SQL语言包括数据定义.数据操纵(Data Manipulation),数据控制(Data Control) ...

  3. php笔试攻略,常见的php笔试题(附答案)搜集整理

    以下是摘要: 1.在PHP中,当前脚本的名称(不包括路径和查询字符串)记录在哪个预定义变量中?而链接到当前页面的URL又记录在哪个预定义变量中? 答:echo $_SERVER['PHP_SELF'] ...

  4. 2014九月十月百度,迅雷,华为,阿里巴巴,最新校招笔试面试题

    九月十月百度,迅雷,华为,阿里巴巴,最新校招笔试面试六十题 题记 本博客自2010年10月11日开通以来,已经帮助了一大批人找到工作,特别是连续三年在每一年的9.10月份陪伴了至少三届毕业生找工作的旅 ...

  5. 进大厂一条龙服务(Java核心面试知识点+一线大厂Java笔试面试题+月薪3万Java优秀简历模板),看这篇就够了

    你有没有觉得Java_工程师竞争压力大.就业困难?不知道面试Java工程师应该准备些什么?.. 现在一切都解决了!你想要的干货知识和面试题统统在这,还有月薪3万Java优秀简历模板,快拿回去嚼烂吧! ...

  6. Java内部类详解(使用场景和好处、相关内部类的笔试面试题)

    此篇文章作者为:Matrix海子 出处:http://www.cnblogs.com/dolphin0520/ 最近也是在学习java,看的是<java核心技术卷一>jdk8,看到内部类的 ...

  7. Python常见的一些面试题,太有用啦!

    在面试找工作中,笔试是经常会遇到的环节,尤其是涉及到技术岗的Python程序员,面试前都会经历笔试的考验.想学完Python后收获到满意的offer,这五个常见的Python面试题你应该知道.下面,跟 ...

  8. python自动化面试提问_Python自动化测试笔试面试题精选

    前言 随着行业的发展,编程能力逐渐成为软件测试从业人员的一项基本能力.因此在笔试和面试中常常会有一定量的编码题,主要考察以下几点. 基本编码能力及思维逻辑 基本数据结构(顺序表.链表.队列.栈.二叉树 ...

  9. 网易历届笔试面试题整理大全

    整理了一下网易往届笔试面试题,希望对大家有帮助: 超级有用的面试题:Java常见面试题    常见算法面试题   数据库常见面试题  操作系统常见面试题   C/C++常见面试题  大数据常见面试   ...

最新文章

  1. 安装 Ruby 和 Rails 开发环境
  2. Wince6.0p上用ASP技术实现Webserver
  3. linux内核运行关系图,一张图看懂Linux内核运行交互关系
  4. 养成10个优秀的习惯
  5. 中兴6908的三层交换
  6. 根据shp文件创建Mask文件
  7. Latex 语法总结(持续更新)
  8. DELL RAID卡管理工具 MegaRAID Storage Manager(偏重RAID常用管理命令)
  9. dom4j操作XML时转换对象时提示:对实体 xxxId 的引用必须以 ';' 分隔符结尾
  10. 模拟人生4 Mac(经营模拟游戏)全DLC可无限金币版
  11. TypeError: parentComponent.ctx.deactivate is not a function
  12. TryHackMe-Misguided Ghosts(boot2root)
  13. 银行卡在ATM机器上插入后显示IC磁条芯片卡拒绝交易解决办法
  14. 系统集成项目管理工程师笔记_备考常见英文词汇汇总
  15. 单元测试利器——手把手教你使用Mockito
  16. java类 家族成员 姓氏_java题目 将一些学生分别按姓氏分类,每个姓氏的学生输出到一行上。...
  17. 计算机科学如此博大精深,到底该怎么学?
  18. php收入表,PHP原生-个人收支记账系统
  19. 成功解决INFO: pip is looking at multiple versions of keras-preprocessing to determine which version is c
  20. AsciiDoc 学习

热门文章

  1. Visual Studio2022快速生成函数说明文档
  2. 怎么桌面给计算机设密码,怎么设置电脑桌面密码
  3. mysql 数据透视_把数据库中的数据制作成Excel数据透视表
  4. npm 发布包遇到的问题
  5. java swing小程序:手动绘制美国队长盾牌
  6. win10鼠标右键问题,导致桌面刷新重启,资源管理器explorer重启,文件夹闪退,应用管理员模式无法运行等等
  7. 什么是redis数据库?
  8. 如何把word里的分页符、换行符替换成回车符?
  9. 播动师,直播广场,一目了然看到直播态势
  10. CentOS下Qt安装