设计模式培训资料_第1页
设计模式培训资料_第2页
设计模式培训资料_第3页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、J a va程序设计的基本概念什么是程序设计软件开发的过程,堆本I:是先分析需耍解决的冋题(用户石求)找止解 决的办法,然后把解决办法用相应的程序语言进行农达(也就是编写朋)最 后使用编好的程序公解决问題的这么个过程。而所训的程序设计,指的就是:在软件开发的过程中,如何找出解决问题 的方法,找到办法过后 如何介理的划分用序结构介理的组织柑庁代码,这样 的一个过用就是程序设计。程序设计能干什么好的程序跖I能让程序:更好的完成用户的需求功繼;仃更E的程序架 构:更好的程轮能:更好的复用性*更好的可扩展性、可维护性、可配置性、 可伸缩性:里好的健壮性:吏好的稳定性申OJava程序设计的基本原则-1面

2、向接口編程这足亦編程里浙人家公认的第惊则优先使用对象组合而非类继承分层最典型的三层架构,衣现址一逻WE-数据J2表现层功能,展示数据、人机交互、收集参数桃逻供层逻辑层功能:进行数据的逻辑校验、进行逻轲判撕、实现业务功能、处理相关功 能、处理后续流程.组织数据返回给表现层数据层功能:实现数据持久化、实现対探和打久化数据的双向映射层间交互的基本原则1;祓现层调用逻辑层逻辑层调用$區不可以反过来2;层间交互喝应该通过胺I I进行U川,以确保各层的实现独立变化Je网程序设计的基本原则-2开闭原则简眼点说就是对新増丿F放对修改关闭°而11.应尽蚩做到不用修改模块的 源代码.就能匹改模块的彳亍为

3、。依赖性倒置原则这个原则就是依赖抽纹而不婆依赖具体的实现。接口隔离原则这个瓯则就楚不婴使川通用的接11.而足为不同的用门使用不同的接11。替换原则这个原则就是j-炎臧、,11了以松换父类H出现«父类能够出现的ff:何地方类设计的基本经验类要单一加强内聚,松散耦合好的封装性类的粒度要合理实现类不能依赖它的使用类应考虑灵活性,也就是可配置、可维护要考虑性能.考虑可伸缩性要考虑今后可能的变化,也就是可扩展性要考虑合理的复用要合理的考电接口和抽象类的使用尽量减少次与协作类的交互次数和交互信息的量父类不应知道子类的信息,子类必须知道父类的信息更多的使用类的细合.而不是继承访问对象必须通过接口,

4、不能绕过接口直接去访问设计模式 (Design Patterns)目的了解 23 种设计模式 掌握常用几种设计模式设计模式简介最早提出“设计模式”概念的是建筑设计大师亚力山大 Alexander。在1970 年他的 建筑的永恒之道 里描述了投计模式的发现, 因为它已经存在了千 百年之久,而现代才被通过大量的研究而被发现。在建筑的永恒之道里这样描述:模式是一条由三个部分组成的通用 规则:它表示了一个特定环境、 一类问题和一个解决方案之间的关系。 每一 个模式描述了一个不断重复发生的问题,以及该问题解决方案的核心设计。尽管亚力山大的著作是针对建筑领域的,但他的观点实际上适用于所有 的工程设计领域,

5、 其中也包括软件设计领域。 “软件设计模式” ,这个术语是 在 1990 年代由 Erich Gamma 等人从建筑设计领域引入到计算机科学中来 的。目前主要有 23 种。创建型创建对象时,不再由我们直接实例化对象;而是根据特定场景,由程序来确定创建对象的方式,从而保证更大的性能、更好的架构优势。? 单例模式 (Singleton)? 构建模式 (Builder)? 原型模式 (Prototype)? 简单工厂模式 (Simple Factory)? 抽象工厂模式 (Abstract Factory)? 工厂方法模式 (Factory Method)结构型将类和对象组合起来,以构成更加复杂的结

6、构,帮助开发人员将简单对象组合在一起形成更加复杂的结构 ,处理对象与对象之间的各种关系? 代理模式 (Proxy)? 适配器模式 (Adapter)? 装饰者模式 (Decorator)? 组合模式 (Composite)? 桥连接模式 (Bridge)? 蝇量模式 (Flyweight)外观模式(Facade)行为型用于帮助系统间各对象的通信,以及如何控制复杂系统中流程。?策略模式(Strategy)?状态模式(State)? 责任链模式(Chain of Responsibility)?解释器模式(I nterpreter)?命令模式(Command)?观察者模式(Observer)?备忘

7、录模式(Memento) ?迭代器模式(Iterator)?模板方法模式(Template Method) ?访问者模式(Visitor)? 中介者模式(Mediator)23种设计模式经典文档-23种设计模式.docx常见设计模式介绍1. 单例模式(singleton)有些时候,允许自由创建某个类的实例没有意义,还可能造成系统性能下降。如果一个类始终只能创建一个实例,则这个类被称为单例类,这种模式就被称为单例模式。public cLass 3 Lngletun public static void mciin (String )/创®Singl*ton对躱不能通过构造器”只能通过g

8、"工zm"方袪S i nrj 1 on s 1 = S £ ng-1 e-七口n . 丁一 JTrz吕 tm riQF ();Singleton s2 = Singleton. tTrs*an<?e ();"将输出"u柱System.out.println'si 吕二、;/便用一个变量来缓存曾绘创建的莫例private static Singletcr: instinct;"将构造器使用private修饰*隐藏该构造器private Single-on()System out »pr intln ( "

9、; Singlet on;"提供一个静态方法*用十返回Singleton实例/该方法可吐加入自定义的控制*保证只产生一个服ng柱七口吐对象public static aingltton getIrst()/如果Initaiiofi为tmll.表明述不曾创建Singleton对猱"如果instance不为null*则表明己绘创建Singleton对誓*将不会执行该方法j_£ ins .ixuil 1 f"创建一个SingletQQJ,井将其缓在起未Ihjeanc* = new Singleton()*ireturri .inz; tan e;单例模式主要有

10、如下两个优势:1)减少创建Java实例所带来的系统开销2)便于系统跟踪单个Java实例的生命周期、实例状态等。2. 简单工厂(StaticFactory Method)简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。A实例调用B实例的方法,称为A依赖于B。如果使用new关 键字来创建一个B实例(硬编码耦合),然后调用B实例的方法。一旦系统 需要重构:需要使用 C类来代替B类时,程序不得不改写 A类代码。而用Output» 接口 public interface Output /接口里定义的

11、属性只能是常量int MAX_CACHE_LINE = 50;/接口里定义的只能是public的抽象实例方法 void out ();void getDa七a(S七ring msg);Printer, Output 的一个实现private String printDa = new St ring MAXCACHE_LINE; /用以记录当前需打印的作业数private int dataNum = 0;public void out()/只要还有作业,继续打印while(dataNum > 0)Systejm. out .prin*tln ("扌J 计扌J E卩:"+

12、 prin七Datm 0);/把作业队列整体前移一位,并将剩下的作业数减1System.drrayaopy(printData , 1, printDataf 0, 一-dataNum); public void getData(String msg)if (da七aNum >= MAX_CACHE_LINE)System, out .printin列已淌,添加失败");else/把打印数据添加到队列里,已保存数据的数量加1. printData dataNum-*-+ = msg;BetterPrintmr, Output 的一彳、实现public class 3etterP

13、rinter implements Outputprivate String printData = new String- MAX CACHE LINE * 2 /用以记录当前需打印的作业数 private int dataNum = 0;public void ou七()/只要还有作业,继续打印while(dataNum > 0)System, out .printin ("高速打卬机正在打印:n + printData 0);/把作业队列整体前移一位,并将剩下的作业数减1System.rraycopy(printData r lr printDatar 0r dataNu

14、m);public void getData(String msg)if (dataNum >= MAX CACHE LINE * 2)System, out .printin (n输出队列已满"添加失败”); else/把打印数据添加到队列里,已保存数据的数量加 printData L<da七aNum+ = msg;OutputFactory,简单匸类public Output getPrinterOutpu-t (Stiring type) if (type.equalsignoreCase(MbetterM)return new BetterPrintEr ();

15、else return new Printer();Computerpublic clas s Comput总工priva七e 厶口七put 匸七;public Comp口t卷工(CnrtFiit cut)(七his.out out;/定义一吓模拟更取字符串输入的方法public void keyLii (String msc-)lcut * getData(msg);定义一个模拟打印的方法public void print()(Ollt . out ();public 耳七ati.c void Twain (3七工匚口 args)/ f 创建Outpu七Wbu七ory of - new Ou

16、tputFac七ory():将Output对磔传入创Ccmf'LLter对鮫DitLputer o 二 new Compu七w工(of .吕色七总匸丄口匕总工Gintpu七("zi匸二皿己1" I ;c. keyln ("建扎水恒之道”);c-keyZn建筑模式语言");c-prInt();c - newi of,Printer Output- r,jce 七七三匸");c - keyln ("建筑水恒之道");c. keyin ( R建筑摸式语H ");c,print ();使用简单工厂模式的优势:让对象

17、的调用者和对象创建过程分离,当对象调用者需要对象时,直接向工厂请求即可。从而避免了对象的调用者与对象的 实现类以硬编码方式耦合,以提高系统的可维护性、可扩展性。工厂模式也有一个小小的缺陷:当产品修改时,工厂类也要做相应的修改。3. 工厂方法(Factory Method)和抽象工厂(Abstract Factory)如果我们不想在工厂类中进行逻辑判断,程序可以为不同产品类提供不同的工厂,不同的工厂类和产不同的产品。当使用工厂方法设计模式时,对象调用者需要与具体的工厂类耦合,如:厂类的定义1jlasaimpLaments OutputF*匚上工丫public寸mtOutput()("该

18、工厂只员责产生B航“工叶血“工对第return new Bett&rPrinter <);/T.r类的定恥public cists s Pr interFaetoryimplenien七耳 Output Factorypiib丄Jef Output getOutput (该工厂只负责产生Printer対誓return new Pxinter(;"工厂类的调用/OutputFictory of = new BetterPrinterFactory();OutputFactory of = new FrinterFactory();Computer c new Comput

19、et(of.getOutput() ;使用简单工厂类,需要在工厂类里做逻辑判断。而工厂类虽然不用在工厂类 做判断。但是带来了另一种耦合:客户端代码与不同的工厂类耦合。为了解决客户端代码与不同工厂类耦合的问题。在工厂类的基础上再增加一个工厂类,该工厂类不制造具体的被调用对象,而是制造不同工厂对象。如:“抽象T厂类的左义”在T.厂类的禺础卜再建一个丁厂类 public class Output-Fact cry Factory"仅定义一个方袪用于返回输出设备.pirblic sta 七 id Outpu 七 F 曰七口:ry 牙己七 Out Fact ar y (Str ing typ?

20、)if (typ. . equal slgnore Jas (,TI:tter")return new 忌寸匸乂打4tu二Fa匸twy ();>elsereturrj. new Prin七己hF云二七:匸丫 ;)"抽線匚厂类的调用Output Factory of = OutputFactOEyFactcirY.孑日七加 tpu七faut;Qiy (“匕日七七兮匕");Computer u = new c:mfiuter (of . get-Output ( );4. 外观模式(Facade)随着系统的不断改进和开发,它们会变得越来越复杂,系统会生成大量的类

21、, 这使得程序流程更难被理解。外观模式可为这些类提供一个简化的接口,从而简化访问这些类的复杂性。外观模式(Facade)也被称为正面模式、门面模式,这种模式用于将一组复 杂的类包装到一个简单的外部接口中。流程1原来的方式/依次创建三个部门实例Payment pay = new PaymentImpl ();Cook cook = new Cooklmpl(); Waiter waiter = new Waiterlmpl ();/依次调用三个部门实例的方法来实现用餐功能String food = pay.pay(); food = cook.cook(food); waiterserve(food);门面模式public class Facade /定义被Facade封装的三个部门Payment pay;Cook cook;Waiter waitmr;/构造器public

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论