设计模式论文.docx
- 文档编号:6393851
- 上传时间:2023-01-06
- 格式:DOCX
- 页数:8
- 大小:19.04KB
设计模式论文.docx
《设计模式论文.docx》由会员分享,可在线阅读,更多相关《设计模式论文.docx(8页珍藏版)》请在冰豆网上搜索。
设计模式论文
第一章设计模式的简介
1.1什么是设计模式
设计模式(Designpattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。
使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。
设计面向对象软件比较困难,而设计可复用的面向对象软件就更加困难,你必须先找出有关的对象,以适当的粒度将他们归类,在定义的接口和继承类,建立对象之间的相互关系。
你的设计应该对手头的问题有针对性,同时对将来的问题有足够的通用性。
设计出尽可能少的重复设计模式。
有经验的面向对象设计者能做出良好的设计,二新手则面对众多选择无从下手。
设计模式使人们可以更加简单方便地复用成功的设计和体系结构。
1.2设计模式的基本要素
记录一个设计模式需要4个基本要素:
(1)名称:
一个模式的名称高度包括该模式的本质,有利于该行业统一术语、便于交流使用。
(2)问题:
描述应该在何时使用模式,解释设计问题和问题存在的前因后果,描述在怎样的环境下使用该模式。
(3)方案:
描述设计的组成部分、他们之间的相互关系及各自的职责和协作方式。
(4)效果:
描述模式的应用效果及使用模式应该权衡的问题。
主要效果包括使用模式对系统的灵活性、扩充性和复用性的影响。
1.3学习设计模式的重要性
一个好的设计系统往往是易维护、易扩展、易复用的,学习好设计模式对提高设计能力无疑是非常有帮助的。
设计模式的目的不是针对软件设计和开发中的每个问题都给出解决方案,而是针对某种特定环境中通常都会遇到的某种软件开发问题给出可用的一些解决方案,因此学习设计模式不仅可以使我们使用好这些成功的模式,更重要的是可以是我们更加深刻地理解面向对象的设计思想,非常有利于我们更好的使用面向对象语言解决设计中的问题。
1.4面向对象的特征
随着计算机硬件设备功能的进一步提高,使得基于对象的编程成为可能(面向对象语言编写的程序需要消耗更多的内存,需要更快的CPU保证其运行速度)。
基于对象的编程更加符合人的思维模式,使用面向对象语言可以编写易维护、易扩展和易复用的程序代码,更重要的是,面向对象编程鼓励创造性的程序设计。
1.4.1封装
面向对象编程的核心思想之一就是将数据核对数据的操作封装在一起。
通过抽象,即从具体的实例中抽取共同的性质形成一般的概念比如,类的概念。
1.4.2继承
继承是一种由已有的类定义出新类的机制。
利用继承,可以先定义一个共有属性的一般类,根据该一般类再定义具有特殊属性的子类,子类继承一般类的属性和行为,并根据需要增加他自己的心得属性和行为。
由继承而得到的类称为子类,被继承的类称为父类(超类)。
Java不支持多重继承,即子类只能有一个父类(与C++不同)。
1.4.3多态
多态是面向对象编程的又一种重要特征。
有两种意义的多态。
一种是操作名称的多态,即有多个操作具有相同的名字,但这些操作所接受的消息类型必须不同。
所谓操作名称的多态性,是指可以向操作传递不同的消息,以便让对象根据响应的消息来产生相应的行为。
另一种是和继承有关的多态,是指同一个操作被不同类型对象调用时可能产生不同的行为。
第二章面向对象的几个基本原则
2.1面向抽象原则
所谓面向对象编程,是指当设计一个类时,不让该类面向具体的类,而是面向抽象类或接口,即所设计类中的重要数据是抽象类或接口声明的变量,而不是具体类声明的变量。
2.2“开-闭”原则
所谓“开-闭”原则,就是让我们的设计对扩展开放,对修改关闭。
实际上这句话的本质是指当一个设计中增加新的模块时,不需要修改现有的模块。
在给出一个设计时,应当首先考虑到用户需求的变化,将应对用户变化的部分设计为对扩展开放,而设计的核心部分是经过精心考虑之后确定下来的基本结构,这部分应当是对修改关闭的,即不能因为用户的需求变化而再发生变化,因为这部分不是用来应对需求变化的。
如果一个设计遵守了“开-闭”原则,那么一定是易维护的,因为在设计中增加新的模块时,不必去修改设计中的核心模块。
2.3“多用组合,少用继承”原则
在许多设计中,人们希望系统的类之间尽量使耦合关系,而不希望是强耦合关系。
设计的底层结构中通常会出现较多的继承结构,而许多应用层需要避开继承的缺点,而需要组合的优点。
要合理的使用组合,而不是使用继承来获得方法的复用,需要经过一定时间的认真思考、学习和编程实践。
2.4“高内聚-弱耦合”原则
如果类中的方法是一组相关的行为,则称该类是高内聚的,反之称为低内聚。
高内聚便于类的维护,而低内聚不利于类的维护。
弱耦合就是尽量不要让一个类含有太多的其他类的实力的引用,以避免修改系统的其中一部分会影响到其他部分。
第三章设计模式分类
3.1行为型模式
行为型模式涉及怎样合理的设计对象之间的交互通信,以及怎样合理地为对象分配职责,让设计富有弹性、易维护、易复用。
(1)策略模式
(2)状态模式
(3)命令模式
(4)中介者模式
(5)责任链模式
(6)模板方法模式
(7)观察者模式
(8)访问者模式
3.2结构型模式
结构型模式涉及如何组合类和对象以形成更大的结构,和类有关的结构型模式设计如何合理点的使用继承机制,和对象有关的结构型模式涉及如何合理的使用对象机制。
(1)装饰模式
(2)组合模式
(3)适配器模式
(4)外观模式
(5)代理模式
(6)享元模式
(7)桥接模式
3.3创建型模式
创建型模式涉及对象的实例化,这类模式的特点是:
不让用户代码依赖于对象的创建或排列方式,避免用户直接使用new运算符创建对象。
(1)工厂方法模式
(2)抽象工厂模式
(3)生成器模式
(4)原型模式
(5)单间模式
3.4工厂模式情景举例
适合使用工厂方法模式的情景:
(1)用户需要一个类的子类的实例,但不希望该类的子类形成耦合。
(2)用户需要一个类的子类的实例,但用户不知道该类有哪些子类可用。
3.4.1设计要求
系统目前已经按照有关药品的规定设计一个抽象类Drug,该抽象类特别规定了所创建的药品必须给出药品的成分及含量。
Drug目前有两个子类:
Paracetamol和Amorolfine。
Paracetamol子类负责创建氨咖黄敏一类的药品;Amorolfine子类负责创建盐酸阿莫罗芬一类的药品。
一个为某药品开发的应用程序需要使用Drug类的某个子类的实例为用户提供药品,但是药店的应用程序不能使用Drug的子类的构造方法直接创建对象,因为药店没有能力给出药品的各个成分的含量,只有药厂才有这样的能力。
请使用工厂方法模式伟已有系统编写一个抽象类,并在其中定义工厂方法,该工厂方法返回Drug类的子类的实例。
3.4.2设计实现
1.抽象产品
按照工厂方法模式,Drug类是工厂方法模式中的抽象产品角色,Drug类代码:
Drug.java
publicabstractclassDrug{
Stringconstitute;
Stringname;
publicStringgetName(){
returnname;
}
publicStringgetConstitute(){
returnconstitute;
}
}
2.具体产品
按照工厂方法模式,Paracetamol类和Amorolfine类是产品角色,Drug类代码:
Paracetamol.java
publicclassParacetamolextendsDrug{
Stringpart1="每粒含乙酰氨基酚";
Stringpart2="每粒含咖啡因";
Stringpart3="每粒含人工牛黄";
Stringpart4="每粒含马来酸氯苯";
publicParacetamol(Stringname,int[]a){
this.name=name;
part1=part+":
"+a[0]+"毫克\n";
part2=part+":
"+a[1]+"毫克\n";
part3=part+":
"+a[2]+"毫克\n";
part4=part+":
"+a[3]+"毫克\n";
constitute=part1+part2+part3+part4;
}
}
Amorolfine.java
publicclassAmorolfineextendsDrug{
Stringpart1="每粒含甲硝唑";
Stringpart2="每粒含人工牛黄";
publicAmorolfine(Stringname,int[]a){
this.name=name;
part1=part+":
"+a[0]+"毫克\n";
part2=part+":
"+a[1]+"毫克\n";
constitute=part1+part2;
}
}
3.构造者
按照工厂方法模式,我们编写了担当构造者角色的接口:
DrugCreator,代码如下:
DrugCreator.java
pulicinterfaceDrugCreator{
publicabstractDruggetDrug();//工厂方法
}
4.具体构造者
按照工厂方法模式,ParaDrugCreator类和AmorDrugCreator类是两个具体构造者角色,代码如下:
ParaDrugCreator.java
publicclassParaDrugCreatorimplementsDrugCreator{
publicDruggetDrug(){
int[]a={250,15,1,10};
Drugdrug=newParacetamol("氨加黄敏胶囊",a);
returndrug;
}
}
AmorDrugCreator.java
publicclassAmorDrugCreatorimplementsDrugCreator{
publicDruggetDrug(){
int[]a={250,5};
Drugdrug=newAmorolfine("甲硝唑胶囊",a);
returndrug;
}
}
5.应用程序
应用程序Appletcation.java使用了上述工厂模式中所涉及的抽象产品、构建者以及具体构造者,即使用具体构造者为用户提供药品。
Appletcation.java
importjava.util.*;
publicclassAppletcation{
publicstaticvoidmain(Stringargs[]){
DrugCreaorcreator=newParaDrugCreator();
Drugdrug=creator.getDrug();
System.out.println(drug.getName()+"的成分:
");
System.out.println(drug.getConstitute());
creator=newAmorDrugCreator();
drug=creator.getDrug();
System.out.println(drug.getName()+"的成分:
");
System.out.println(drug.getConstitute());
}
}
运行结果:
氨加黄敏胶囊的成分:
每粒含乙酰氨基酚:
250毫克
每粒含咖啡因:
15毫克
每粒含人工牛黄:
1毫克
每粒含马来酸氯苯:
10毫克
甲硝唑胶囊的成分:
每粒含甲硝唑:
200毫克
每粒含人工牛黄:
5毫克
第四章设计模式学习总结
目前,面向对象程序设计已经成为软件设计开发领域的主流,而学习使用设计模式无疑非常有助于软件开发人员使用面向对象语言开发出易维护、易扩展、易复用的代码,其原因是设计模式是从许多优秀的软件系统中总结出的成功的可复用的设计方案,已被成功应用与许多系统的设计中。
同时感觉自己在学习设计模式中有很多的不足,理论不太熟悉,不能熟练运用于程序中,在以后的学习过程中要更加努力,达到熟练运用。
致谢
在完成这篇论文的过程中,主要参考了课本的知识,也在网上查询了相关知识。
在此过程中,让我认识到了自身的不足,相关的知识的缺乏。
同时,感谢身边同学的帮助,以及老师的指导。
在以后的学习中,我会更加努力,完善自己在设计模式学习中的知识,提高能力。
参考文献
【1】耿祥义张跃平著.面向对象与设计模式:
清华大学出版社,2013.6
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 设计 模式 论文