资源预览内容
第1页 / 共66页
第2页 / 共66页
第3页 / 共66页
第4页 / 共66页
第5页 / 共66页
第6页 / 共66页
第7页 / 共66页
第8页 / 共66页
第9页 / 共66页
第10页 / 共66页
亲,该文档总共66页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
设计模式DesignPatterns可复用面向对象软件的基础设计模式(Designpattern)是一套被频频使用、多半人了解的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更简单被别人理解、保证代码可靠性。毫无疑问,设计模式于己于别人于系统都是多赢的,设计模式使代码编制真实工程化,设计模式是软件工程的基石,好像大厦的一块块砖石同样。项目中合理的运用设计模式能够完满的解决好多问题,每种模式在此刻中都有相应的原理来与之对应,每一个模式描述了一个在我们四周不停重复发生的问题,以及该问题的核心解决方案,这也是它能被广泛应用的原由。本章系Java之美从菜鸟到能手演变系列之设计模式,我们会以理论与实践相联合的方式来进行本章的学习,希望广大程序喜好者,学好设计模式,做一个优异的软件工程师!一、设计模式的分类整体来说设计模式分为三大类:创立型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建筑者模式、原型模式。结构型模式,共七种:适配器模式、装修器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。行为型模式,共十一种:策略模式、模板方法模式、察看者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、接见者模式、中介者模式、解说器模式。其实还有两类:并发型模式和线程池模式。用一个图片来整体描绘一下:二、设计模式的六大原则1、开闭原则(OpenClosePrinciple)开闭原则就是说对扩睁开放,对改正封闭。在程序需要进行拓展的时候,不可以去改正原有的代码,实现一个热插拔的成效。所以一句话归纳就是:为了使程序的扩展性好,易于保护和升级。想要达到这样的成效,我们需要使用接口和抽象类,后边的详细设计中我们会提到这点。2、里氏代换原则(LiskovSubstitutionPrinciple)里氏代换原则(LiskovSubstitutionPrincipleLSP)面向对象设计的基来源则之一。里氏代换原则中说,任何基类能够出现的地方,子类必定能够出现。LSP是继承复用的基石,只有当衍生类能够替代掉基类,软件单位的功能不遇到影响时,基类才能真实被复用,而衍生类也能够在基类的基础上增添新的行为。里氏代换原则是对“开-闭”原则的增补。实现“开-闭”原则的要点步骤就是抽象化。而基类与子类的继承关系就是抽象化的详细实现,所以里氏代换原则是对实现抽象化的详细步骤的规范。FromBaidu百科3、依靠倒转原则(DependenceInversionPrinciple)这个是开闭原则的基础,详细内容:真对接口编程,依靠于抽象而不依靠于详细。4、接口隔绝原则(InterfaceSegregationPrinciple)这个原则的意思是:使用多个隔绝的接口,比使用单个接口要好。仍是一个降低类之间的耦合度的意思,从这儿我们看出,其实设计模式就是一个软件的设计思想,从大型软件架构出发,为了升级和保护方便。所以上文中多次出现:降低依靠,降低耦合。5、迪米特法例(最少知道原则)(DemeterPrinciple)为何叫最少知道原则,就是说:一个实体应当尽量少的与其余实体之间发生互相作用,使得系统功能模块相对独立。6、合成复用原则(CompositeReusePrinciple)原则是尽量使用合成/聚合的方式,而不是使用继承。三、Java的23中设计模式从这一块开始,我们详尽介绍Java中23种设计模式的观点,应用处景等状况,并联合他们的特色及设计模式的原则进行剖析。1、工厂方法模式(FactoryMethod)工厂方法模式分为三种:11、一般工厂模式,就是成立一个工厂类,对实现了同一接口的一些类进行实例的创立。第一看下关系图:举比以下:(我们举一个发送邮件和短信的例子)第一,创立两者的共同接口:javaviewplaincopy1.publicinterfaceSenderpublicvoidSend();其次,创立实现类:javaviewplaincopy1.publicclassMailSenderimplementsSenderOverride3.publicvoidSend()4.System.out.println(thisismailsender!);javaviewplaincopy1.publicclassSmsSenderimplementsSender2.Override4.publicvoidSend()5.System.out.println(thisissmssender!);最后,建工厂类:javaviewplaincopy1.publicclassSendFactory2.3.publicSenderproduce(Stringtype)4.if(mail.equals(type)5.returnnewMailSender();6.elseif(sms.equals(type)7.returnnewSmsSender();8.else9.System.out.println(请输入正确的种类!);10.returnnull;我们来测试下:1.publicclassFactoryTest2.3.publicstaticvoidmain(Stringargs)4.SendFactoryfactory=newSendFactory();5.Sendersender=factory.produce(sms);sender.Send();输出:thisissmssender!22、多个工厂方法模式,是对一般工厂方法模式的改良,在一般工厂方法模式中,假如传递的字符串犯错,则不可以正确创立对象,而多个工厂方法模式是供给多个工厂方法,分别创建对象。关系图:将上边的代码做下改正,变动下SendFactory类就行,以下:javaviewplaincopypublicclassSendFactorypublicSenderproduceMail()1.returnnewMailSender();4.publicSenderproduceSms()5.returnnewSmsSender();测试类以下:javaviewplaincopy1.publicclassFactoryTest2.3.publicstaticvoidmain(Stringargs)4.SendFactoryfactory=newSendFactory();Sendersender=factory.produceMail();sender.Send();输出:thisismailsender!33、静态工厂方法模式,将上边的多个工厂方法模式里的方法置为静态的,不需要创立实例,直接调用即可。javaviewplaincopy1.publicclassSendFactory2.3.publicstaticSenderproduceMail()4.returnnewMailSender();7.publicstaticSenderproduceSms()8.returnnewSmsSender();javaviewplaincopy1.publicclassFactoryTest2.3.publicstaticvoidmain(Stringargs)Sendersender=SendFactory.produceMail();sender.Send();输出:thisismailsender!总体来说,工厂模式合适:凡是出现了大批的产品需要创立,并且拥有共同的接口时,可以经过工厂方法模式进行创立。在以上的三种模式中,第一种假如传入的字符串有误,不能正确创立对象,第三种相对于第二种,不需要实例化工厂类,所以,大部分状况下,我们会采纳第三种静态工厂方法模式。2、抽象工厂模式(AbstractFactory)工厂方法模式有一个问题就是,类的创立依靠工厂类,也就是说,假如想要拓展程序,必须对工厂类进行改正,这违反了闭包原则,所以,从设计角度考虑,有必定的问题,怎样解决?就用到抽象工厂模式,创立多个工厂类,这样一旦需要增添新的功能,直接增添新的工厂类就能够了,不需要改正以前的代码。因为抽象工厂不太好理解,我们先看看图,然后就和代码,就比较简单理解。
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号