c,,,设计模式,面试

上传人:bin****86 文档编号:56672218 上传时间:2018-10-14 格式:DOCX 页数:24 大小:26.80KB
返回 下载 相关 举报
c,,,设计模式,面试_第1页
第1页 / 共24页
c,,,设计模式,面试_第2页
第2页 / 共24页
c,,,设计模式,面试_第3页
第3页 / 共24页
c,,,设计模式,面试_第4页
第4页 / 共24页
c,,,设计模式,面试_第5页
第5页 / 共24页
点击查看更多>>
资源描述

《c,,,设计模式,面试》由会员分享,可在线阅读,更多相关《c,,,设计模式,面试(24页珍藏版)》请在金锄头文库上搜索。

1、c,c,设计模式设计模式, ,面试面试篇一:八设计模式 java 面试题八、设计模式基础知识 1、设计模式及框架 定义和作用? 设计模式:设计模式是一种问题的解决思路,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经 验的总结,它已经适用于一个实践环境,并且可以适用于其它环境。 使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性,为设计提供共同的词汇,可以节 省大量时间,使代码编制真正工程化 框架:框架是构成一类特定软件可复用设计的一组相互协作的类,框架通常定义了应用体系的整体结构 类和对 象的关系等等设计参数。 框架便于具体应用实现者能集中精力于应用本身的特定细节

2、。框架主要记录软件应用中共同的设计决策,框架强 调设计复用,因此框架设计中必然要使用设计模式,设计模式有助于对框架结构的理解,成熟的框架通常使用了 多种设计模式 2、开发中都用到了哪些设计模式?(J2EE 常用的设计模式?)用在什么场合? 答:singleton:单例,用来减少垃圾对象和缓存用 factory:工厂模式,用来解耦(其实模式都用来解耦的)facade 和 decorator:封装接口 command:命令模式,传递 Iterator:用来遍历对象Observer:用来监听状态变化(现在习惯用 listener 机制替代) templete:模板模式,用来处理相同的操作步骤 str

3、ategy:策略模式,策略选择 proxy:用来附加功能,属性或隐蔽。 bridge 也很实用,用来解耦工厂与产品搭配之类的选择 服务定位者模式,前端控制器模式,DAO 模式,代理模式,装饰者模式等 注:MVC 模式准确来说并不是设计模式,而是架构。详解如下: MVC 模式是一个复杂的架构模式,其实现也显得非常复杂。但是,我们已经总结出了很多可靠的设计模式,多种设计模式结合在一起,使 MVC 模式的实现变得相对简单易行。Views 可以看作一棵树,显然可以用 Composite Pattern(合成模式)来实现。Views 和 Models 之间的关系可以用 Observer Pattern(

4、观察者模式)体现。Controller 控制 Views 的显示,可以用 Strategy Pattern(策略模式)实现。Model 通常是一个调停者,可采用 Mediator Pattern 来实现。|合成模式:装饰模式、享元模式、迭代子模式、访问者模式 |策略模式:享元模式 |观察者模式:调停模式、单例模式 以下是部分设计模式详解 工厂模式:专门负责将大量有共同接口的类实例化。工厂模式可以动态确定将那一个类实例化,不必事先知道每 次要实例化哪一个类。 简单工厂模式:或称静态工厂方法模式。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单 工厂模式就是由一个工厂类根据传入的参数

5、决定创建哪一种产品类的实例。简单工厂模式涉及到工厂角色、抽象产品角色以及具体产品角色:a 工厂类角色:含有与应用紧密相关的商业逻辑。工厂类在客户端的直接调用下创建产品对象。b 抽象产品角色:担任这个角色的类是由工厂方法模式所创建的对象的父类,或它们共同拥有的接口。c 具体产品角色:工厂方法模式所创建的任何对象都是这个角色的实例。优点是:允许客户端相对独立于产品创建的过程,并且在系统引入新产品的时候无需修改客户端。缺点是:如果有新的产品加入到系统中去,就需要修改工厂类,将必要的逻辑加入到工厂类中。 工厂方法模式:或称多态性工厂模式。工厂方法模式的用意是定义一个创建产品对象的工厂接口,将实际创建工

6、 作推迟到子类中。工厂方法模式中,核心的工厂类不再负责所有的产品的创建,而是将具体创建的工作交给子类去做。它仅负责给出具体工厂子类必须实现的接口。这样可以用来允许系统在不修改具体工厂角色的情况下引进新的产品。工厂方法模式涉及到的角色:a 抽象工厂角色:它不包含应用逻辑。任何在模式中创建对象的工厂类必须实现这个接口。b 具体工厂角色:含有与应用密切相关的逻辑,并且受到应用程序的调用以创建产品对象。c 抽象产品角色:工厂方法模式所创建的对象的超类型,也就是产品对象的共同父类或共同拥有的接口。d 具体产品角色:这个角色实现了抽象产品角色所声明的接口。 单例模式:确保某一个类只有一个实例,而且自行实例

7、化并向整个系统提供这个实例。特点:单例类只能有一个 实例;单例类必须自己创建自己的惟一的实例;单例类必须给所有其他对象提供这一实例。 多例模式:多例类可以有多个实例,并且多例类必须自己创建、管理自己的实例,并向外界提供自己的实例。在 系统中可以用于数据库连接池、键值缓存等。 代理模式:给某个对象提供一个代理对象,并由代理对象控制对原对象的引用。代理模式所涉及的角色:抽象主 题角色:声明了真实主题和代理主题的共同接口,这样一来在任何可以使用真实主题的地方都可以使用代理主题角色。 39 篇二:C 语言设计模式目录 语言设计模式(开篇) .2 语言和设计模式(继承、封装、多态) .3 继承性 .3

8、封装性 .4 多态 .4 3.单件模式 .4 4.工厂模式 .5 5.抽象工厂模式 .6 6.访问者模式 .8 7.状态模式 .9 8.命令模式 .9 9.解释器模式 .10 10.备忘录模式 .11 11.观察者模式 .12 12.桥接模式 .12 13.建造者模式 .13 14.中介者模式 .14 15.策略模式 .15 16.适配器模式 .16 17.装饰模式 .17 18.亨元模式 .17 19.代理模式 .18 20.外观模式 .19 21.迭代器模式 .20 22.责任链模式 .21 23模版模式 . 22 24.组合模式 .24 25.原型模式 .25 语言设计模式(开篇) 关于

9、软件设计方面的书很多,比如重构 ,比如设计模式 。至于软件开发方式,那就更多了,什么极限编程、精益方法、敏捷方法。随着时间的推移,很多的方法又会被重新提出来。 其实,就我个人看来,不管什么方法都离不开人。一个人写不出二叉树,你怎么让他写?敏捷吗?你写一行,我写一行。还是迭代?写三行,删掉两行,再写三行。项目的成功是偶然的,但是项目的失败却有很多原因,管理混乱、需求混乱、设计低劣、代码质量差、测试不到位等等。就软件企业而言,没有比优秀的文化和出色的企业人才更重要的了。 从软件设计层面来说,一般来说主要包括三个方面:(1)软件的设计受众,是小孩子、老人、女性,还是专业人士等等; (2)软件的基本设

10、计原则,以人为本、模块分离、层次清晰、简约至上、适用为先、抽象基本业务等等; (3)软件编写模式,比如装饰模式、责任链、单件模式等等。 从某种意义上说,设计思想构成了软件的主题。软件原则是我们在开发中的必须遵循的准绳。软件编写模式是开发过程中的重要经验总结。灵活运用设计模式,一方面利于我们编写高质量的代码,另一方面也方便我们对代码进行维护。毕竟对于广大的软件开发者来说,软件的维护时间要比软件编写的时间要多得多。编写过程中,难免要有新的需求,要和别的模块打交道,要对已有的代码进行复用,那么这时候设计模式就派上了用场。我们讨论的主题其实就是设计模式。 讲到设计模式,人们首先想到的语言就是 c#或者

11、是java,最不济也是 c+,一般来说没有人会考虑到 c 语言。其实,我认为设计模式就是一种基本思想,过度美化或者神化其实没有必要。其实阅读过 linux kernel 的朋友都知道,linux 虽然自身支持很多的文件系统,但是 linux 自身很好地把这些系统的基本操作都抽象出来了,成为了基本的虚拟文件系统。 举个例子来说,现在让你写一个音乐播放器,但是要支持的文件格式很多,什么 ogg,wav,mp3 啊,统统要支持。这时候,你会怎么编写呢?如果用 C+语言,你可能会这么写。 class music_file HANDLE hFile; public: void music_file()

12、virtual music_file() virtual void read_file() virtual void play() virtual void stop() virtual void back() virtual void front() virtual void up() virtual void down() ; 其实,你想想看,如果用 C 语言能够完成相同的抽象操作,那不是效果一样的吗? typedef struct _music_file HANDLE hFile; void (*read_file)(struct _music_file* pMusicFile); vo

13、id (*play)(struct _music_file* pMusicFile); void (*stop)(struct _music_file* pMusicFile); void (*back)(struct _music_file* pMusicFile); void (*front)(struct _music_file* pMusicFile); void (*down)(struct _music_file* pMusicFile); void (*up)(struct _music_file* pMusicFile); music_file; 当然,上面的例子比较简单,但是

14、也能说明一些问题。写这篇文章的目的一是希望和朋友们共同学习模式的相关内容,另一方面也希望朋友们能够活学活用,既不要迷信权威,也不要妄自菲薄。只要付出努力,付出汗水,肯定会有收获的。有些大环境你改变不了,那就从改变自己开始。万丈高楼平地起,一步一个脚印才能真真实实学到东西。如果盲目崇拜,言必 google、微软、apple,那么除了带来几个唾沫星,还能有什么受用呢?无非白费了口舌而已。 希望和大家共勉。 语言和设计模式(继承、封装、多态) 记得还在我们大学 C+第一门课的时候,老师就告诉我们说,C+是一门面向对象的语言。C+有三个最重要的特点,即继承、封装、多态。等到后来随着编码的增多和工作经验

15、的积累,我也慢慢明白了面向对象的含义。可是,等我工作以后,使用的编程语言更多的是 C 语言,这时候我又想能不能把 C 语言变成面向对象的语言呢?等到后来通过思考和实践,我发现其实 C 语言也是可以面向对象的,也是可以应用设计模式的,关键就在于如何实现面向对象语言的三个重要属性。 继承性 typedef struct _parent int data_parent; Parent; typedef struct _Child struct _parent parent; int data_child; Child; 在设计 C 语言继承性的时候,我们需要做的就是把基础数据放在继承的结构的首位置即

16、可。这样,不管是数据的访问、数据的强转、数据的访问都不会有什么问题。 封装性 struct _Data; typedef void (*process)(struct _Data* pData); typedef struct _Data int value; process pProcess; Data; 封装性的意义在于,函数和数据是绑在一起的,数据和数据是绑在一起的。这样,我们就可以通过简单的一个结构指针访问到所有的数据,遍历所有的函数。封装性,这是类拥有的属性,当然也是数据结构体拥有的属性。 多态 3.单件模式 有过面试经验的朋友,或者对设计模式有点熟悉的朋友,都会对单件模式不陌生。对很多面试官而言,单件模式更是他们面试的保留项目。其实,我倒认为,单件模式算不上什么设计模式。最多也就是个技巧。 单件模式要是用 C+写,一般这么写。 #include #include class object pub

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 总结/报告

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号