接口也可以创建对象吗_面试时,一个小小的设计模式可以把你虐成渣
设计模式一套被反复使用,多数人知晓的代码设计经验的总结,实现可重用代码,使代码更容易被理解,保证代码可靠性。
总体来说,设计模式分为三大类:
创建型模式(五种):工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式
结构型模式(七种):适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式
行为型模式(十一种):策策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
常见的设计模式介绍:
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 存放观察者们。
感谢大家看到最后,我是不务正业的程序汪,文章每天持续更新!欢迎大家指出我的文章的不足之处,也欢迎大家关注、点赞+转发。
接口也可以创建对象吗_面试时,一个小小的设计模式可以把你虐成渣相关推荐
- 【转】面试:一个单例模式,足以把你秒成渣
去面试(对,又去面试) 问:单例模式了解吧,来,拿纸和笔写一下单例模式. 我心想,这TM不是瞧不起人吗?我编程十年,能不知道单例模式. 答:(.net 平台下)单例模式有两种写法: 第一种:饥饿模式, ...
- python面试题_面试时全对这25道python面试题,成就了我月薪25K!附教程分享)
之前面试的时候,面试官拿出一些python面试题对我说,只要全部正确直接给我20K,我一看题目笑了,居然全部都会,今天拿出来给大家分享一下~ 面试时全对这25道python面试题,成就了我月薪20K! ...
- php算法求出一个数可以被分解成多少个_面试时写不出排序算法?看这篇就够了(下)...
昨天给大家介绍了面试时到底应该如何写出排序算法,也简单的介绍了一些方法 今天我们继续为大家介绍 前言 递归是一种解决问题的方法,它解决问题的各个小部分,直到解决最初的大问题.通常涉及函数调用自身. 能 ...
- 大数据面试3分钟自我介绍_面试时三分钟自我介绍,需要注意哪些问题?
"面试20分钟,开头占大头."一个好的自我介绍真真真真的太太太重要了! 作为一个从业近10年的hr,在面试当中,如果应聘者给我们的第一印象很好,大方得体,他入选的概率就要大很多. ...
- 用php写一个可以抽取随机数的工具一次只抽四个怎么实现?_面试了一个32岁的程序员,场面一度很尴尬。...
招人背景 首先说一下朋友的公司招人背景,公司招聘PHP高级岗位,负责公司的B2B项目研发.并发问题的处理和解决.领导给了他两个要求:(接下来的讲述我会以朋友的第一人称来进行) (1)技术比较好 (2) ...
- c++ 不插入重复元素但也不排序_面试时写不出排序算法?看这篇就够了
小Hub领读: 本文主要详细讲述常见的八种排序算法的思想.实现以及复杂度.包括冒泡排序.快速排序.插入排序.希尔排序等等,文章讲解非常详细! 作者:静默虚空 https://juejin.im/pos ...
- system流怎么判断为空_面试时被问到单例模式,怎么回答才能让面试官眼前一亮?...
考虑到马上到来的金九银十的面试季,我给大家介绍一下面试官的必问题,先从单例模式开始,这个设计模式看似简单,想回答得让面试官眼前一亮,还不是那么容易的. 一.什么是单例模式 单例模式是一种常用的软件设计 ...
- redis 设置不过期_面试时 Redis 内存淘汰总被问,但是总答不好,怎么解决?
什么是内存淘汰 内存淘汰,和平时我们设置redis key的过期时间,不是一回事:内存淘汰是说,假设我们限定redis只能使用8g内存,现在已经使用了这么多了(包括设置了过期时间的key和没设过期时间 ...
- python面试自我介绍怎么介绍比较好_面试时三分钟自我介绍,需要注意哪些问题?...
万事开头难,许多面试的开场问题就是"能否请你做一下自我介绍".在一场为时十几分钟乃至几十分钟的面试里,留给应聘者做自我介绍的时间一般也只有3分钟左右.在如此短的时间内,要如何&qu ...
最新文章
- 【转】Mac 程序员的十种武器
- K近邻(KNN)算法是基于实例的算法,如果训练样本数量庞大,预测的时候挨个计算距离效率会很低下,如何破解?
- .net项目的二次开发解决方案
- linux——shell 中的运算
- Android添加Header请求参数实例,java响应header请求实现demo
- Java基础——Java反射机制及IoC原理
- 《阿里云互联网多媒体存储解决方案蓝皮书》震撼上线!
- 不是纯技术的管理技术
- ICP算法与Kdtree
- iOS——使用StroryBoard页面跳转及传值
- R-CNN、Fast R-CNN、Faster R-CNN算法对比
- 西威变频器调试软件GF-EXprss
- sql server 函数根据分隔符号拆分字符
- InsecureProgramming-master——abo1
- 利用最小二乘法进行参数估计
- Excel中 匹配尾部字符并替换
- ceph-kvstore-tool
- IDEA在同一工作空间,显示多个项目
- 在c语言程序中使用数据库,数据库与C语言程序设计两者之间有什么联系?
- 狂赚 1200 亿,差点收购苹果,影响千万程序员,那个叫做太阳的公司却陨落了!...
热门文章
- latex 引用_VS Code + LaTex + Zotero 写作毕业论文
- 汽车维修保养记录php源码,汽车维修保养记录
- antd table设置表格一个单元格的字体颜色_微软Office三件套,各有一个效率神器,全都知道的人不超过1%...
- 神秘大三角(判断点与三角形的关系)
- 怎么用esc服务器做网站,云服务器esc能做网站
- zabbix监控mysql的哪些参数_Centos6.3下zabbix监控mysql数据库参数
- php 调用变量方法名,php中引用(变量和函数名前加符号)用法
- oracle数据库切换教程,oracle 11gR2 物理备用数据库搭建及切换
- python温度转换程序_用Python程序温度转换实例
- 用C#操作word替换字符,用spire