设计模式大作业

发布 2021-03-07 06:35:28 阅读 9847

摘要:随着软件系统规模和复杂性的增加, 人们对软件的可靠性和生产效率也提出了更高的要求, 软件重用在当前比以往任何时候都显得重要。 设计模式是系统设计阶段的软件重用, 使得那些具有良好性能的设计方案可以在相似环境下被再次复用。 设计模式以文档的形式把面向对象的软件设计经验记录下来, 并予以系统的命名 、解释和评价 , 使开发人员在进行系统的设计与开发时, 可以使用别人的成功经验而不必为普通的、重复的问题重新设计解决方案 ,使设计者更容易理解其设计思路 ,能为自己的问题找到更合适的解决办法,帮助设计者更快更好地完成系统设计。

1.设计模式简介。

设计模式是针对面向对象系统中重复出现的设计问题,提出一个通用的设计方案,并予以系统化的命名和动机解释。它描述了问题,提出了解决方案,并指出在什么条件下使用该方案以及其效果。该解决方案是解决该问题的一组精心安排的通用的类和对象,再经过定制和实现就可用来解决特定的上下文中的问题。

简单来说,设计模式就是一个常用的方案。在我们的开发过程中经常会遇到一些相同或相近的问题,如果每次都寻找一个相应的解决办法&那么就会增加开发时间,降低开发效率。为了节省时间&提高开发效率&就需要提供一些解决类似问题的,在应用中被证明可行的方案设计模式。

所以一个设计模式就是描述了一个被证明可行的方案,这些方案可以重用,有良好的伸缩性。一般而言,一个设计模式有四个要素:

1.模式名称2.问题。3.解决方案。4.效果。

2.设计模式的分类。

根据两条准则对模式进行分类 ,范围准则和目的准则。

范围准则,即指定设计模式主要是用于类还是用于对象。设计模式据此可分。

为:1)类设计模式:处理类和子类之间的关系,这些关系通过继承建立,是静态的,在编译时刻便确定下来了。

2)对象设计模式:处理对象间的关系,这些关系在运行时刻是可以变化的,更具动态性。从某种意义上来说,几乎所有设计模式都使用继承机制,所以“类设计模式”只指那些集中于处理类间关系的设计模式,而大部分设计模式都属于对象设计模式的范畴。

目的准则,即设计模式是用来完成什么工作的。设计模式据此可分为:

l)创建型设计模式:与类或对象的创建有关;

2)结构型设计模式:处理类或对象的组合;

3)行为型设计模式:对类或对象怎样交互和怎样分配职责进行。

描述。创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。

结构型模式,共七种:适配器模式、装饰器模式、**模式、外观模式、桥接模式、组合模式、享元模式。

行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

3.设计模式的六大原则。

1.单一职责原则:一个类应该只有一个职责。

优点:降低类的复杂性;提高类的可读性;提高**的可维护性和复用性;降低因变更引。

起的风险。2.里氏替换原则:对实现抽象化的具体步骤的规范。

优点:**共享,减少创建类的工作量,每个子类都拥有父类的方法和属性;提高**的。

可重用性;提高**的可扩展性;提高产品或项目的开放性。

缺点:1.继承是入侵式的。只要继承,就必须拥有父类所有属性和方法。

2.降低**的灵活性。子类必须拥有父类的属性和方法,使子类收到限制。

3.增强了耦合性。当父类的常量、变量和方法修改时,必须考虑子类的修改,这种。

修改可能造成大片的**需要重构。

3.依赖倒置原则:高层模块不应该依赖低层模块,两者都依赖其抽象;抽象不依赖细节;细。

节应该依赖于抽象。

在j**a中的表现:模块间的依赖通过抽象发生,实现类之间不发生直接的依赖关系,其依。

赖关系是通过接口或抽象类产生的;接口或抽象类不依赖于是实现类;实现类依赖于接口或抽象类。

4.接口隔离原则:1.

一个类对另外一个类的依赖性应当是建立在最小的接口上的2.一个接口代表一个角色,不应当将不同的角色交给一个接口。3.

不应该强迫客户使用它们的不同方法。

5.迪米特法则:一个实体应当尽量少的与其他实体之间发生相互作用,使得系统功能模块相对独立。对迪米特法则进行模式设计有两个:外观模式、中介者模式。

6.开闭原则:一个软件实体应当对扩展开放,对修改关闭。

重要性体现:提高复用性;提高维护性;提高灵活性;易于测试。

4.为什么要使用设计模式。

1)设计模式是经过证实的:设计模式反映了开发者的经验、知识和洞察力,开发者曾成功地使用过这些设计模式。

2)设计模式是可复用的:设计模式提供了一个现成的解决方案,可根据需要适应不同的问题,可帮助设计者更快更好地完成系统设计;同时,设计模式帮助系统设计者做出有利于系统复用的选择,避免设计损害了系统的复用性。

3)设计模式是有表现力的:设计模式提供了一个公共的解决方案的词汇表,可用来简洁地表达大的解决方案,也会使新的系统开发者更加容易理解其设计思路。

4)在面向对象的编程中,软件编程人员更加注重以往**的重用性和可维护性。通过提供一个类和对象作用关系以及它们之间潜在联系的说明规范,设计模式甚至能够提高己有系统的文档管理和系统维护的有效性。

5. 结束语。

设计模式是在实践中总结出来的, 可复用的面向对象的软件设计方法。 为了使程序具有一个良好 、灵活的结构 , 以及充分的可扩展性和**的可重用性,设计模式在面向对象程序设计中具有重要的意义和作用。 但要注意的是,缺乏经验的开发者会很容易地掉进“模式陷阱 ”之中。

“模式陷阱 ”是指滥用模式,在处理问题时不是去寻找可能存在的最好方案 ,而是把最终目标集中在尽可能地实现更多的设计模式之上 . 使用设计模式并不是必然会带来良好的设计,要想在设计中正确地运用一个设计模式, 必须确保三个条件 :

1) 弄清你的问题及设计的要求;

2) 了解这个模式

3) 理解这个模式如何解决你的问题 . 只有在真正有“易扩展性和**的可重用性”这种要求的场合, 运用相关的设计模式才是适宜的 ,如果没有这种需要 ,那么采用直接的 ,简单的设计方案才是正确的选择 .

简单工厂模式违背了闭包原则,工厂方法模式,创建一个工厂接口和创建多个工厂实现类,这样一旦需要增加新的功能,直接增加新的工厂类就可以了,不需要修改之前的**。

多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。

一个抽象工厂类,可以派生出多个具体工厂类。

每个具体工厂类可以创建多个具体产品类的实例,也就是创建的是一个产品线下的多个产品。

单例对象(singleton)是一种常用的设计模式,使用单例模式,能保证核心交易服务器独立控制整个流程。

原型模式虽然是创建型的模式,但是与工程模式没有关系,该模式的思想就是将一个对象作为原型,对其进行复制、克隆,产生一个和原对象类似的新对象。

适配器模式将某个类的接口转换成客户端期望的另一个接口表示,目的是消除由于接口不匹配所造成的类的兼容性问题。主要分为三类:类的适配器模式、对象的适配器模式、接口的适配器模式。

装饰模式就是给一个对象增加一些新的功能,而且是动态的,要求装饰对象和被装饰对象实现同一个接口,装饰对象持有被装饰对象的实例,装饰器模式的应用场景:

1、需要扩展一个类的功能。

2、动态的为一个对象增加功能,而且还能动态撤销。(继承不能做到这一点,继承的功能是静态的,不能动态增删。)

**模式就是多一个**类出来,替原对象进行一些操作。

**模式的应用场景:

如果已有的方法在使用的时候需要对原有的方法进行改进,此时有两种办法:

1、修改原有的方法来适应。这样违反了“对扩展开放,对修改关闭”的原则。

2、就是采用一个**类调用原有的方法,且对产生的结果进行控制。这种方法就是**模式。

使用**模式,可以将功能划分的更加清晰,有助于后期维护!

外观模式是为了解决类与类之家的依赖关系的,降低了类类之间的耦合度,该模式中没有涉及到接口。

桥接模式就是把事物和其具体实现分开,使他们可以各自独立的变化。桥接的用意是:将抽象化与实现化解耦,使得二者可以独立变化。

组合模式有时又叫部分-整体模式,在处理类似树形结构的问题时比较方便。

12、享元模式(flyweight)

享元模式的主要目的是实现对象的共享,即共享池,当系统中对象多的时候可以减少内存的开销,通常与工厂模式一起使用。

策略模式定义了一系列算法,并将每个算法封装起来,使他们可以相互替换,且算法的变化不会影响到使用算法的客户。需要设计一个接口,为一系列实现类提供统一的方法,多个实现类实现该接口,设计一个抽象类(可有可无,属于辅助类),提供辅助函数。

一个抽象类中,有一个主方法,再定义1...n个方法,可以是抽象的,也可以是实际的方法,定义一个类,继承该抽象类,重写抽象方法,通过调用抽象类,实现对子类的调用。

包括这个模式在内的接下来的四个模式,都是类和类之间的关系,不涉及到继承,当一个对象变化时,其它依赖该对象的对象都会收到通知,并且随着变化!对象之间是一种一对多的关系。

迭代器模式就是顺序访问聚集中的对象,一是需要遍历的对象,即聚集对象,二是迭代器对象,用于对聚集对象进行遍历访问。

有多个对象,每个对象持有对下一个对象的引用,这样就会形成一条链,请求在这条链上传递,直到某一对象决定处理该请求。但是发出者并不清楚到底最终那个对象会处理该请求,所以,责任链模式可以实现,在隐瞒客户端的情况下,对系统进行动态的调整。

设计模式大作业

学生 吴鹏丽班级 软测2班学号 20132110010303 序号 2 01 问题1.请简述什么是里氏代换原则?5分 严格定义 如果对每一个类型为 t1的对象 o1,都有类型为 t2 的对象o2,使得以 t1定义的所有程序 p 在所有的对象 o1 都代换成 o2 时,程序 p 的行为没有发生变化,那...

模式识别大作业

一。问题重述。利用fisher线性判别法和最近邻算法对sonar数据进行分类,并得出正确率。二。fisher线性判别法思路。用训练样本求出d维空间到一维空间的投影方向w,进而求出样本均值,进而可求出阈值t,带入测试样本得到投影点y,将y与t相比,即可进行分类判别。2.1 fisher准则函数中的基本...

模式识别大作业

作业1 用身高和 或体重数据进行性别分类 一 基本要求 用和的数据作为训练样本集,建立bayes分类器,用测试样本数据对该分类器进行测试。调整特征 分类器等方面的一些因素,考察它们对分类器性能的影响,从而加深对所学内容的理解和感性认识。具体做法 1 应用单个特征进行实验 以 a 身高或者 b 体重数...