欢迎来到天天文库
浏览记录
ID:33577918
大小:2.01 MB
页数:54页
时间:2019-02-27
《软件工程-10-面向对象设计-设计模式》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、软件工程第十章面向对象设计设计模式简介每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复劳动。建筑设计师ChristopherAlexander软件设计中设计模式的理解是:•优秀的设计范例•从优秀设计方案中发现和总结出来的经验•在实践中反复出现的设计问题的优秀解决方案•设计者相互交流的基本术语•培养优秀设计师的一条捷径不是:•面向对象设计的框架•可供简单组合的设计元件•发明创造出来的创新思路•解决面向对象设计问题的完整方案框架在设
2、计模式中:框架(Framework)是构成一类特定软件可复用设计的一组相互协作的类框架可以认为是一个适用于某个领域的软件包。这个软件包提供了相应领域的各个问题的解决方法。框架与设计模式的区别设计模式和框架针对的问题域不同•设计模式针对面向对象的问题域;•框架针对特定业务的问题域;设计模式比框架更为抽象•设计模式在碰到具体问题后,才能产生代码•框架已经可以用代码表示。设计模式是比框架更小的体系结构元素•框架中可以包括多个设计模式。为什么要使用设计模式复用设计方案•设计人员不必再为普遍、重复的问题重新设计解
3、决方案建立通用的术语•交流与协作都需要一个共同的词汇基础、一个对问题的共同观点。设计模式在项目的分析和设计阶段提供了一个通用的参考点优化系统内部的结构•实际的设计过程中,设计人员更多的考虑如何解决业务问题,对于软件内部结构考虑较少,设计模式帮助解决这方面问题《设计模式》中建议的几点策略针对接口编程优先使用对象组合,而不是类继承找到并封装变化点分类创建型(Creational)•解决如何创建对象的问题。结构型(Structural)•解决如何正确的组合类或对象的问题。行为型(Behavioral)•解决类
4、或对象之间如何交互和如何分配职责的问题。创建型结构型行为型FactoryMethodAdapter_ClassInterpreterAbstractFactoryAdapter_ObjectTemplateMethodBuilderBridgeChainofResponsibilityPrototypeCompositeCommandSingletonDecoratorIteratorFacadeMediatorFlyweightMementoProxyObserverStateStrategyVisi
5、tor23种设计模式一览表设计模式之Factory-工厂模式工厂模式它定义了一个创建对象的接口,但是却让子类来决定具体实例化哪一个类。当一个类无法预料要创建哪种类的对象或是一个类需要由子类来指定创建的对象时我们就需要用到FactoryMethod模式了。FactoryMethod模式结构Product:需要创建的产品的抽象类。ConcreteProduct:Product的子类,一系列具体的产品。Creator:抽象创建器接口,声明返回Product类型对象的FactoryMethod。Concrete
6、Creator:具体的创建器,重写Creator中的FactoryMethod,返回ConcreteProduct类型的实例。客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修改。publicclassFactory{publicstaticSamplecreator(intwhich){//getClass产生Sample一般可使用动态类装载装入类。if(which==1)returnnewSampleA();e
7、lseif(which==2)returnnewSampleB();}}例子:程序的一种报错的方式1、定义Trace接口publicinterfaceTrace{//turnonandoffdebuggingpublicvoidsetDebug(booleandebug);//writeoutadebugmessagepublicvoiddebug(Stringmessage);//writeoutanerrormessagepublicvoiderror(Stringmessage);}publicc
8、lassFileTraceimplementsTrace{privatejava.io.PrintWriterpw;2、实现接口(1)privatebooleandebug;publicFileTrace()throwsjava.io.IOException{//arealFileTracewouldneedtoobtainthefilenamesomewhere//fortheexampleI'llhardcodeitpw=newjava
此文档下载收益归作者所有