php开发面试题---创建型设计模式1(创建型设计模式有哪几种)
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(创建型设计模式有哪几种)的更多相关文章
- 【理论面试篇】收集整理来自网络上的一些常见的 经典前端、H5面试题 Web前端开发面试题
##2017.10.30收集 面试技巧 5.1 面试形式 1) 一般而言,小公司做笔试题:大公司面谈项目经验:做地图的一定考算法 2) 面试官喜欢什么样的人 ü 技术好. ...
- [转]linux C/C++服务器后台开发面试题总结
linux C/C++服务器后台开发面试题总结 https://www.cnblogs.com/nancymake/p/6516933.html 一.编程语言 1.根据熟悉的语言,谈谈两种语言的区别 ...
- 前端开发面试题-JavaScript(转载)
本文由 本文的原作者markyun 收集总结. 介绍js的基本数据类型. Undefined.Null.Boolean.Number.String. ECMAScript 2015 新增:Symbol ...
- java 开发面试题小整理(一)
本篇文档将持续更新,有基础滴,也有深层次的,谢谢! 1.看下面的程序是否有问题,如果有问题,请指出并说明理由. * byte b1 = 3; * byte b2 = 4; * byte b3 = b1 ...
- php开发面试题---lavarel和tp的区别是什么(呕心整理)
php开发面试题---lavarel和tp的区别是什么(呕心整理) 一.总结 一句话总结: 反思的回顾非常有用,因为决定了我的方向和技巧 以战养己,这是非常非常好的方式 主要从大小.功能.安全性.操作 ...
- 前端开发面试题总结之——JAVASCRIPT(一)
___________________________________________________________________________________ 相关知识点 数据类型.运算.对象 ...
- J2EE进阶(十四)超详细的Java后台开发面试题之Spring IOC与AOP
J2EE进阶(十四)超详细的Java后台开发面试题之Spring IOC与AOP 前言 搜狐畅游笔试题中有一道问答题涉及到回答谈谈对Spring IOC与AOP的理解.特将相关内容进行整理. ...
- php开发面试题---Linux常用命令大全
php开发面试题---Linux常用命令大全 一.总结 一句话总结: ls 查看目录中的文件 cd .. 返回上一级目录 cat 查看文件内容 touch 新建文件或修改时间 1.linux 系统信息 ...
- php开发面试题---数据库SQL调优的几种方式
php开发面试题---数据库SQL调优的几种方式 一.总结 一句话总结: 创建索引:尽量避免使用or或者like,或者sql中的正则 存储查询中间结果 可以加sphinx搜索技术 查询优化 主从数据库 ...
随机推荐
- ribbon学习
spring cloud 中的负载均衡有ribbon和feign 引入ribbon依赖 <!--ribbon相关--> <dependency> <groupId> ...
- SCP-bzoj-1079
项目编号:bzoj-1079 项目等级:Safe 项目描述: 戳这里 特殊收容措施: DP.普通的状压状态数515,显然TLE+MLE,我们考虑把底数和幂换一换,压成155的状态数. 故状态设计为:f ...
- ShopNC多用户商城标题去版权 后台去版权方法2.0版本
一.前台标题: \framework\tpl\nc.php 第85行 $output['html_title'] = ( $output['html_title'] != "" ? ...
- Effective Objective-C 2.0
Effective Objective-C 2.0:编写高质量iOS与OS X代码的52个有效方法 作者:Matt Galloway(英) 译者:爱飞翔 出版社:机械工业出版社 出版年:2014-01 ...
- Google recaptcha在webform中的使用
开源项目 https://github.com/tanveery/recaptcha-net 这个的NuGet下载量最高 https://github.com/PaulMiami/reCAPTCH ...
- 83、Tensorflow中的变量管理
''' Created on Apr 21, 2017 @author: P0079482 ''' #如何通过tf.variable_scope函数来控制tf.ger_variable函数获取已经创建 ...
- docker-compose 搭建 Redis Sentinel 测试环境
docker-compose 搭建 Redis Sentinel 测试环境 本文介绍如何使用 docker-compose 快速搭建一个 Redis Sentinel 测试环境.其中 Redis 集群 ...
- js实现复选框全选/全不选/反选
js实现复选框全选/全不选/反选 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "h ...
- grep 后加单引号、双引号和不加引号的区别
请尊重版权,原文地址:https://blog.csdn.net/cupidove/article/details/8783968 单引号: 可以说是所见即所得:即将单引号内的内容原样输出,或者描述为 ...
- 分析/proc/[pid]/maps中的各个内存区域的大小
cat maps | sed -e "s/\([0-9a-f]\{8\}\)-\([0-9a-f]\{8\}\)/0x\1 0x\2/" | awk '{printf(" ...