设计模式答辩.docx

上传人:b****8 文档编号:29423290 上传时间:2023-07-23 格式:DOCX 页数:14 大小:19.88KB
下载 相关 举报
设计模式答辩.docx_第1页
第1页 / 共14页
设计模式答辩.docx_第2页
第2页 / 共14页
设计模式答辩.docx_第3页
第3页 / 共14页
设计模式答辩.docx_第4页
第4页 / 共14页
设计模式答辩.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

设计模式答辩.docx

《设计模式答辩.docx》由会员分享,可在线阅读,更多相关《设计模式答辩.docx(14页珍藏版)》请在冰豆网上搜索。

设计模式答辩.docx

设计模式答辩

《大话设计模式》

 

设计模式简单介绍

&

学习总结

 

学号:

13700107

姓名:

庄鹏

完成日期:

2015年6月5日

目录:

目录

目录:

2

代理模式模式详解3

1真实场景&实例代码:

3

真实场景:

3

实例代码:

3

2模式带来的优缺点设计思想6

优点:

6

缺点:

6

设计思想:

6

定义:

6

思想与使用场景:

6

工厂模式详解8

3真实场景&实例代码:

8

真实场景:

8

实例代码:

8

4模式带来的优缺点设计思想10

优点:

10

缺点:

10

设计思想:

10

定义:

10

思想与使用场景:

10

原型设计模式详解12

5真实场景&实例代码:

12

真实场景:

12

实例代码:

12

2模式带来的优缺点设计思想13

优点:

13

缺点:

13

设计思想:

13

定义:

13

思想与使用场景:

13

设计模式总结14

1设计模式的由来:

14

1、1由来:

14

1、2设计模式的分类:

14

2设计模式的依据:

14

1、根本依据:

14

2、依据的开发原则:

15

3设计模式的本质:

15

4感悟:

15

代理模式模式详解

要求:

写实例代码,真实场景,使用这种模式带来的优缺点设计思想

1真实场景&实例代码:

真实场景:

当修改类A的数时,将这个数字乘以100赋给类B,而修改类B时,要将数除以100赋给类A。

类A类B互相影响

实例代码:

abstractclassAbstractColleague{

protectedintnumber;

publicintgetNumber(){

returnnumber;

}

publicvoidsetNumber(intnumber){

this.number=number;

}

//注意这里的参数不再是同事类,而是一个代理

publicabstractvoidsetNumber(intnumber,AbstractMediatoram);

}

classColleagueAextendsAbstractColleague{

publicvoidsetNumber(intnumber,AbstractMediatoram){

this.number=number;

am.AaffectB();

}

}

classColleagueBextendsAbstractColleague{

@Override

publicvoidsetNumber(intnumber,AbstractMediatoram){

this.number=number;

am.BaffectA();

}

}

abstractclassAbstractMediator{

protectedAbstractColleagueA;

protectedAbstractColleagueB;

publicAbstractMediator(AbstractColleaguea,AbstractColleagueb){

A=a;

B=b;

}

publicabstractvoidAaffectB();

publicabstractvoidBaffectA();

}

classMediatorextendsAbstractMediator{

publicMediator(AbstractColleaguea,AbstractColleagueb){

super(a,b);

}

//处理A对B的影响

publicvoidAaffectB(){

intnumber=A.getNumber();

B.setNumber(number*100);

}

//处理B对A的影响

publicvoidBaffectA(){

intnumber=B.getNumber();

A.setNumber(number/100);

}

}

publicclassClient{

publicstaticvoidmain(String[]args){

AbstractColleaguecollA=newColleagueA();

AbstractColleaguecollB=newColleagueB();

AbstractMediatoram=newMediator(collA,collB);

System.out.println("==========通过设置A影响B==========");

collA.setNumber(1000,am);

System.out.println("collA的number值为:

"+collA.getNumber());

System.out.println("collB的number值为A的10倍:

"+collB.getNumber());

System.out.println("==========通过设置B影响A==========");

collB.setNumber(1000,am);

System.out.println("collB的number值为:

"+collB.getNumber());

System.out.println("collA的number值为B的0.1倍:

"+collA.getNumber());

}

}

2模式带来的优缺点设计思想

优点:

∙适当地使用代理模式可以避免同事类之间的过度耦合,使得各同事类之间可以相对独立地使用。

∙使用代理模式可以将对象间一对多的关联转变为一对一的关联,使对象间的关系易于理解和维护。

∙使用代理模式可以将对象的行为和协作进行抽象,能够比较灵活的处理对象间的相互作用。

缺点:

对于大多数的情况,同事类之间的关系不会复杂到混乱不堪的网状结构,因此,大多数情况下,将对象间的依赖关系封装的同事类内部就可以的,没有必要非引入代理模式。

滥用代理模式,只会让事情变的更复杂。

设计思想:

定义:

用一个代理对象封装一系列的对象交互,代理使各对象不需要显示地相互作用,从而使耦合松散,而且可以独立地改变它们之间的交互

思想与使用场景:

在面向对象编程中,一个类必然会与其他的类发生依赖关系,完全独立的类是没有意义的。

一个类同时依赖多个类的情况也相当普遍,既然存在这样的情况,说明,一对多的依赖关系有它的合理性,适当的使用代理模式可以使原本凌乱的对象关系清晰,但是如果滥用,则可能会带来反的效果。

一般来说,只有对于那种同事类之间是网状结构的关系,才会考虑使用代理模式。

可以将网状结构变为星状结构,使同事类之间的关系变的清晰一些。

      代理模式是一种比较常用的模式,也是一种比较容易被滥用的模式。

对于大多数的情况,同事类之间的关系不会复杂到混乱不堪的网状结构,因此,大多数情况下,将对象间的依赖关系封装的同事类内部就可以的,没有必要非引入代理模式。

滥用代理模式,只会让事情变的更复杂。

工厂模式详解

要求:

写实例代码,真实场景,使用这种模式带来的优缺点设计思想

3真实场景&实例代码:

真实场景:

场景如下:

汽车由发动机、轮、底盘组成,现在需要组装一辆车交给调用者

 

实例代码:

工厂代码:

(java)

接口:

interfaceIFactory{

publicICarcreateCar();

}

工厂类:

classFactoryimplementsIFactory{

publicICarcreateCar(){

Engineengine=newEngine();

Underpanunderpan=newUnderpan();

Wheelwheel=newWheel();

ICarcar=newCar(underpan,wheel,engine);

returncar;

}

}

调用组装汽车:

publicclassClient{

publicstaticvoidmain(String[]args){

IFactoryfactory=newFactory();

ICarcar=factory.createCar();

car.show();

}

}}

4模式带来的优缺点设计思想

优点:

1、抽象工厂模式隔离了具体类的生产,使得客户并不需要知道什么被创建。

2、当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象。

3、增加新的具体工厂和产品族很方便,无须修改已有系统,符合“开闭原则”。

缺点:

1、简单的对象如果使用工厂模式,就需要引入一个工厂类,会增加系统的复杂度。

2、增加新的产品等级结构很复杂,需要修改抽象工厂和所有的具体工厂类

设计思想:

定义:

一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类。

思想与使用场景:

首先,工厂模式作为一种创建类模式,在任何需要生成复杂对象的地方,都可以使用工厂方法模式。

应用特点就是复杂对象适合使用工厂模式,而简单对象,特别是只需要通过new就可以完成创建的对象,无需使用工厂模式。

如果使用工厂模式,就需要引入一个工厂类,会增加系统的复杂度。

      其次,工厂模式是一种典型的解耦模式,迪米特法则在工厂模式中表现的尤为明显。

假如调用者自己组装产品需要增加依赖关系时,可以考虑使用工厂模式。

将会大大降低对象之间的耦合度。

      再次,由于工厂模式是依靠抽象架构的,它把实例化产品的任务交由实现类完成,扩展性比较好。

也就是说,当需要系统有比较好的扩展性时,可以考虑工厂模式,不同的产品用不同的实现工厂来组装。

原型设计模式详解

要求:

写实例代码,真实场景,使用这种模式带来的优缺点设计思想

5真实场景&实例代码:

真实场景:

实现一个接口,重写一个方法完成一个简单的原型模式

实例代码:

classPrototypeimplementsCloneable{

publicPrototypeclone(){

Prototypeprototype=null;

try{

prototype=(Prototype)super.clone();

}catch(CloneNotSupportedExceptione){

e.printStackTrace();

}

returnprototype;

}

}

classConcretePrototypeextendsPrototype{

publicvoidshow(){

System.out.println("原型模式实现类");

}

}

publicclassClient{

publicstaticvoidmain(String[]args){

ConcretePrototypecp=newConcretePrototype();

for(inti=0;i<10;i++){

ConcretePrototypeclonecp=(ConcretePrototype)cp.clone();

clonecp.show();

}

}

}

2模式带来的优缺点设计思想

优点:

使用原型模式创建对象比直接new一个对象在性能上要好的多,因为Object类的clone方法是一个本地方法,它直接操作内存中的二进制流,特别是复制大对象时,性能的差别非常明显。

      使用原型模式的另一个好处是简化对象的创建,使得创建对象就像我们在编辑文档时的复制粘贴一样简单。

缺点:

1、单例模式与原型模式是冲突的

2、Object类的clone方法只会拷贝对象中的基本的数据类型,对于数组、容器对象、引用对象等都不会拷贝,这就是浅拷贝。

如果要实现深拷贝,必须将原型模式中的数组、容器对象、引用对象等另行拷贝。

设计思想:

定义:

用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。

思想与使用场景:

在需要重复地创建相似对象时可以考虑使用原型模式。

比如需要在一个循环体内创建对象,假如对象创建过程比较复杂或者循环次数很多的话,使用原型模式不但可以简化创建过程,而且可以使系统的整体性能提高很多

设计模式总结

要求:

总结设计模式(设计模式的由来,依据,本质,感悟)

1设计模式的由来:

1、1由来:

(个人理解):

是软件长期开发(面向对象)中人们总结并经验逐渐有了一个简单的开发编写代码的流程,继而提出相应的原则与理论体系。

人们根据这些原则与体系逐渐摸索并提出来具有普遍适应(各个厂家)的编程方法与方式即1设计模式

1、2设计模式的分类:

设计模式分为三种类型,共23种。

1、创建型模式:

单例模式、抽象工厂模式、建造者模式、工厂模式、原型模式。

2、结构型模式:

适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。

3、行为型模式:

模版方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式、访问者模式。

2设计模式的依据:

1、根本依据:

代码复用,增加可维护性。

2、依据的开发原则:

依据面向对象的几个原则

开闭原则(OpenClosedPrinciple,OCP)、

里氏代换原则(LiskovSubstitutionPrinciple,LSP)、

依赖倒转原则(DependencyInversionPrinciple,DIP)、

接口隔离原则(InterfaceSegregationPrinciple,ISP)、

合成/聚合复用原则(Composite/AggregateReusePrinciple,CARP)、

最小知识原则(PrincipleofLeastKnowledge,PLK,也叫迪米特法则)。

开闭原则具有理想主义的色彩,它是面向对象设计的终极目标。

其他几条,则可以看做是开闭原则的实现方法。

设计模式就是实现了这些原则,从而达到了代码复用、增加可维护性的目的。

3设计模式的本质:

设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。

如同:

建筑的设计标准一样:

各个地形(场景)适应不同的建筑结构(设计模式)

4感悟:

学习感悟:

(个人感觉)设计模式有点像数学中的计算公式,不同的题型有不同的公式可以套用

公式(设计模式)的运用可以简化解题的过程。

同样,设计模式的应用于学习可以简化软件的开发与设计过程。

个人认为设计模式优点:

1、给设计软件的人一个方向与思路,给出了一个简单的实现软件功能的方向

2、简化了,程序的编写(让人逻辑思路清晰。

3、可以减少代码量,增加代码复用(以前编写的类似代码可以改改继续使用)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 教学研究 > 教学计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1