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. Python基础(三):简化除法判断、分析apache访问日志、扫描存活主机、利用多线程实现ssh并发访问

    一.简化除法判断 目标: 编写mydiv.py脚本,主要要求如下: 提示用户输入一个数字作为除数 如果用户按下Ctrl+C或Ctrl+D则退出程序 如果用户输入非数字字符,提示用户应该输入数字 如果用 ...

  2. layui.form小例子

    layui.form小例子 需要引入layui的包 <!doctype html> <html> <head> <meta charset="utf ...

  3. grep 后加单引号、双引号和不加引号的区别

    请尊重版权,原文地址:https://blog.csdn.net/cupidove/article/details/8783968 单引号: 可以说是所见即所得:即将单引号内的内容原样输出,或者描述为 ...

  4. javaScript的事件冒泡事件捕获

    (1)冒泡型事件:事件按照从最特定的事件目标到最不特定的事件目标(document对象)的顺序触发. IE 5.5: div -> body -> document IE 6.0: div ...

  5. Linux内核TSS的使用

    参见文章:http://blog.chinaunix.net/uid-22695386-id-272098.html linux2.4之前的内核有进程最大数的限制,受限制的原因是,每一个进程都有自已的 ...

  6. 力扣算法题—144Binary Tree Preorder Traversal

    Given a binary tree, return the preorder traversal of its nodes' values. Example: Input: [1,null,2,3 ...

  7. InnoDB与Myisam比较

    InnoDB与Myisam比较                                                                                     ...

  8. python3中浮点数相减问题(大部分时候只需要关注整数的二进制形式就行了)

    首先直接上判断方法:一切判断直接将整数部分装化成二进制,如果位数相等则相减后的值是等于的,如果不相等,相减大的结果一定不等于你要比较的结果. 如66.6-60.6==6.0的情况,66.6的二进制:1 ...

  9. 学习vim 从常用按键开始

      ctrl+e 将屏幕下滚一行 ctrl+u 将屏幕上滚半页 ctrl+d 将屏幕下滚半页 ctrl+b 将屏幕上滚一页 ctrl+f 将屏幕下滚一页 撤销 u 前进 ctrl r 移动 下一个单词 ...

  10. React 16.4 生命周期

    补一下 React 16.4版本的生命周期图