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搜索技术 查询优化 主从数据库 ...
随机推荐
- 【Linux】 Centos7 安装 mysql-8.0
本文介绍使用rpm包安装mysql, 以 mysql-8.0.17-1.el7.x86_64.rpm-bundle.tar 为例: 1.下载 MySQL下载地址:https://dev.mysql.c ...
- vue2 — vuex状态管理
一.为什么使用vuex : https://www.cnblogs.com/goloving/p/9080005.html vuex的功能 和 localstorage 的作用是一样,把数据在一个所有 ...
- horizontalAccuracy 检测定位成功
- (void)findCurrentLocation { self.isFirstUpdate = YES; [self.locationManager startUpdatingLocation] ...
- python selenium模拟登陆163邮箱。
selenium是可以模拟浏览器操作. 有些爬虫是异步加载的,通过爬取网页源码是得不到需要的内容.所以可以模拟浏览器去登陆该网站进行爬取操作. 需要安装selenium通过pip install xx ...
- 69、schema的相关方法
public class SObjectSchema { public void testSchema(){ //获取SObject的token //1.先获取所有token,然后通过key获取需要的 ...
- Python Numpy 矩阵级基本操作(2)
1.开方与求e指数 import numpy as np from numpy.matlib import randn print "Test sqrt and exp" arr ...
- layui点击图片放大-多图显示
layui点击图片放大-多图显示 标签(空格分隔): js HTML // div <div id="photo-list"> <img class=" ...
- ztree 数组和树结构互转算法
//树转化为数组transformToArrayFormat: function (setting, nodes) { if (!nodes) return []; var childKey = se ...
- mysql 日期和时间戳互换
1.日期转时间戳 UNIX_TIMESTAMP('2019-06-25 12:30:00') 2.时间戳转日期 FROM_UNIXTIME(1545711900,'%Y-%m-%d') 3. DAT ...
- js node.children与node.childNodes与node.firstChild,node,lastChild之间的关系
博客搬迁,给你带来的不便,敬请谅解! http://www.suanliutudousi.com/2017/11/06/js-node-children%e4%b8%8enode-childnodes ...