php开发面试题---创建型设计模式1(创建型设计模式有哪几种)

一、总结

一句话总结:

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

1、学设计模式最好的方式是什么?

能够自己举例,举一反三,并且多举例
用:用永远是最好的学习方式
自己实例多用性:一举三得:所有的设计模式,往legend系统里面来靠,这样既学了设计模式,又改进了legend2,而且这还是能把设计模式学好的为数不多的几种方法

2、设计模式大的分类有哪几种?

创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

其实还有两类:并发型模式和线程池模式。

3、设计模式六大原则?

接口:依赖倒转原则,接口隔离原则
自己:开闭原则,单一职责原则,迪米特法则
子类:里氏替换原则

开闭原则:对扩展开放,对修改关闭。
单一职责原则:每个类应该实现单一的职责
里氏替换原则:任何基类可以出现的地方,子类一定可以出现,并且增加新的行为
依赖倒转原则:面向接口编程,依赖于抽象而不依赖于具体
接口隔离原则:每个接口中不存在子类用不到却必须实现的方法
迪米特法则:最少知道原则:一个类对自己依赖的类知道的越少越好
合成复用原则:尽量首先使用合成/聚合的方式,而不是使用继承

4、工厂模式适合的场景是哪些?

凡是出现了大量的产品需要创建,并且具有共同的接口时,可以通过工厂方法模式进行创建。

5、在实际编程中,常用的简单工厂模式是哪一种?

静态工厂模式:调用的方法写成静态的

6、简单工厂模式的问题是什么?

如果想要拓展程序,必须对工厂类进行修改,这违背了开闭原则

简单工厂模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,

7、工厂方法模式 相对于简单工厂模式的改进是什么?

用类的继承实现功能的扩展:解决简单工厂模式违反的开闭原则

8、抽象工厂模式实例?

比如说工厂可以生产鼠标和键盘。那么抽象工厂的实现类(它的某个具体子类)的对象都可以生产鼠标和键盘,但可能工厂A生产的是罗技的键盘和鼠标,工厂B是微软的。

9、抽象工厂模式 和 工厂方法模式 的区别实例?

多维变量和单维变量的区别:所以说抽象工厂就像工厂(比如每个工厂可以生产不同厂商的键盘和鼠标),而工厂方法则像是工厂的一种产品生产线

10、抽象工厂模式 和 工厂方法模式 的区别?

多个抽象产品类:工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。
工厂类创建多个产品:工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。
工厂方法关注于'怎么创建':工厂方法创建 "一种" 产品,他的着重点在于"怎么创建",也就是说如果你开发,你的大量代码很可能围绕着这种产品的构造,初始化这些细节上面。也因为如此,类似的产品之间有很多可以复用的特征,所以会和模版方法相随。

11、单例模式的好处是什么?

1、节省开销:某些类创建比较频繁,对于一些大型的对象,这是一笔很大的系统开销。
2、省去了new操作符:降低了系统内存的使用频率,减轻GC压力。
3、有些情况必须使用单例模式:有些类如交易所的核心交易引擎,控制着交易流程,如果该类可以创建多个的话,系统完全乱了。(比如一个军队出现了多个司令员同时指挥,肯定会乱成一团),所以只有使用单例模式,才能保证核心交易服务器独立控制整个流程。

12、自己的简单工厂模式实例?

学设计模式一定要 【用】和 【举一反三】
发送qq消息和发送微信消息,工厂里面根据字段来判断是发送的qq消息还是微信消息,从而调用想用的类的响应的方法

13、自己的工厂方法模式实例?

学设计模式一定要 【用】和 【举一反三】
发送qq消息和发送微信消息,发送类继承发送接口public interface Sender { }:,有发送qq消息的工厂,有发送微信消息的工厂

14、自己的抽象工厂模式实例?

学设计模式一定要 【用】和 【举一反三】
生成键盘和生产鼠标,华为的工厂里面生产的是华为的键盘和鼠标,小米的工厂里面生产的是小米的键盘和鼠标

二、内容在总结中

 

php开发面试题---创建型设计模式1(创建型设计模式有哪几种)的更多相关文章

  1. 【理论面试篇】收集整理来自网络上的一些常见的 经典前端、H5面试题 Web前端开发面试题

    ##2017.10.30收集 面试技巧 5.1 面试形式 1)        一般而言,小公司做笔试题:大公司面谈项目经验:做地图的一定考算法 2)        面试官喜欢什么样的人 ü  技术好. ...

  2. [转]linux C/C++服务器后台开发面试题总结

    linux C/C++服务器后台开发面试题总结  https://www.cnblogs.com/nancymake/p/6516933.html 一.编程语言 1.根据熟悉的语言,谈谈两种语言的区别 ...

  3. 前端开发面试题-JavaScript(转载)

    本文由 本文的原作者markyun 收集总结. 介绍js的基本数据类型. Undefined.Null.Boolean.Number.String. ECMAScript 2015 新增:Symbol ...

  4. java 开发面试题小整理(一)

    本篇文档将持续更新,有基础滴,也有深层次的,谢谢! 1.看下面的程序是否有问题,如果有问题,请指出并说明理由. * byte b1 = 3; * byte b2 = 4; * byte b3 = b1 ...

  5. php开发面试题---lavarel和tp的区别是什么(呕心整理)

    php开发面试题---lavarel和tp的区别是什么(呕心整理) 一.总结 一句话总结: 反思的回顾非常有用,因为决定了我的方向和技巧 以战养己,这是非常非常好的方式 主要从大小.功能.安全性.操作 ...

  6. 前端开发面试题总结之——JAVASCRIPT(一)

    ___________________________________________________________________________________ 相关知识点 数据类型.运算.对象 ...

  7. J2EE进阶(十四)超详细的Java后台开发面试题之Spring IOC与AOP

    J2EE进阶(十四)超详细的Java后台开发面试题之Spring IOC与AOP 前言   搜狐畅游笔试题中有一道问答题涉及到回答谈谈对Spring IOC与AOP的理解.特将相关内容进行整理.    ...

  8. php开发面试题---Linux常用命令大全

    php开发面试题---Linux常用命令大全 一.总结 一句话总结: ls 查看目录中的文件 cd .. 返回上一级目录 cat 查看文件内容 touch 新建文件或修改时间 1.linux 系统信息 ...

  9. php开发面试题---数据库SQL调优的几种方式

    php开发面试题---数据库SQL调优的几种方式 一.总结 一句话总结: 创建索引:尽量避免使用or或者like,或者sql中的正则 存储查询中间结果 可以加sphinx搜索技术 查询优化 主从数据库 ...

随机推荐

  1. centos7 安装VMware tools 出现The path "" is not a valid path to the 3.10.0-514.el7.x86_64 kernel headers

    执行:yum install "kernel-devel-uname-r == $(uname -r)"

  2. BZOJ 1005: [HNOI2008]明明的烦恼(高精度+prufer序)

    传送门 解题思路 看到度数和生成树个树,可以想到\(prufer\)序,而一张规定度数的图的生成树个数为\(\frac{(n-2)!}{\prod\limits_{i=1}^n(d(i)-1)!}\) ...

  3. AcWing 233. 换教室 (期望DP+floyd)打卡

    题目:https://www.acwing.com/problem/content/235/ 题意:有n个时间段,这个时间段有两个地方授课ci,di,最开始是在ci,可以申请去di,但是是几率的,然后 ...

  4. location优先级

    location优先级 location优先级 location /img # 直接匹配 location /img { index index.html } location = /img # 精确 ...

  5. linux基础知识汇总(二)-vi/vim

    转:http://blog.csdn.net/sky04/article/details/5662582 vi与vim一样都是编辑器,不同的是vim更高级一些,可以理解是vi的高级版本.vi就像Win ...

  6. Django基础篇(一)

    Python的Web框架有Django.Tornado.Flask等多种,Django相较其他web框架的优势有: 大而全.框架本身集成了ORM框架.模板绑定.缓存.Session等诸多功能. 1.安 ...

  7. PAT_A1033#To Fill or Not to Fill

    Source: PAT A1033 To Fill or Not to Fill (25 分) Description: With highways available, driving a car ...

  8. Mysql任意读取客户端文件复现

    本机执行 python rogue_mysql_server.py 目标机器上连接本机数据库 mysql -u root -p -h 本机IP mysql -h 192.168.250.132 -ur ...

  9. python学习笔记:操作Excle

    import xlwt #写excel import xlrd #读excel import xlutils #修改excel 一.写操作 1.写Excel import xlwt #写excel,导 ...

  10. 力扣算法——139WordBreak【M】

    Given a non-empty string s and a dictionary wordDict containing a list of non-empty words, determine ...