




已阅读5页,还剩68页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java的23种设计模式,分类,创建型模式(5种模式),AbstractFactory抽象工厂模式Builder建造模式(生成器模式)FactoryMethod工厂方法模式Prototype原始模型模式Singleton单例模式,抽象工厂模式,提供一个创建一系列(相互依赖)对象的接口,而无需指定它们具体的类。,抽象工厂模式,模式的结构中包括四种角色:抽象产品(Product)具体产品(ConcreteProduct)抽象工厂(AbstractFactory)具体工厂(ConcreteFactory),抽象工厂模式,实例:麦当劳的鸡翅和肯德基的鸡翅都是你爱吃的东西,虽然口味有所不同只管向服务员说“来四个鸡翅”就行了。麦当劳和肯德基就是生产鸡翅的Factory。客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修改。,建造模式(生成器模式),模式的结构中包括四种角色:产品(Product)抽象生成器(Builder)具体生成器(ConcreteBuilder)指挥者(Director),建造模式,将一个复杂对象的构建与它的表示分离,使同样的构建过程可以创建不同的表示。见到不同地方的人,想用他们的方言跟他们交流,有一种语言翻译机,上面每种语言都有一个按键,只要按对应的键,它就能够用相应的语言说话了,与外国人也可以轻松交流了。,工厂方法模式,定义一个用于创建对象的接口,让子类决定实例化哪一个类。FactoryMethod使一个类的实例化延迟到其子类。模式的结构中包括四种角色:抽象产品(Product)具体产品(ConcreteProduct)构造者(Creator)具体构造者(ConcreteCreator),工厂方法模式,工厂方法模式,请朋友们去麦当劳吃汉堡,不同的人有不同的口味,要每个都记住是一件烦人的事情,采用FactoryMethod模式,带着朋友们到服务员那儿,说“要一个汉堡”,具体要什么样的汉堡呢,让朋友直接跟服务员说就行了。核心工厂类不再负责所有产品的创建,而是将具体创建的工作交给子类去做,成为一个抽象工厂角色,仅负责给出具体工厂类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节。,原始模型模式,用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。模式的结构中包括两种角色:抽象原型(Prototype)具体原型(ConcretePrototype),原始模型模式,原始模型模式,给别人发祝福短信,一定要说些吉祥的话语,搜集了好多吉祥语,需要时只要copy到手机里面就行了,这就是prototype。通过给出一个原型对象来指明所要创建的对象的类型,然后用复制这个原型对象的方法创建出更多同类型的对象。,单例模式,保证一个类仅有一个实例,并提供一个访问它的全局访问点。模式的结构中只包括一个角色:单件类(Singleton),单例模式,单例模式,实例:3年2班一共有30名同学,可是班主任只有一个,这些同学只要说到班主任,说的都是同一个人。那么班主任就是singleton。单件类的唯一实例由单件类本身来控制,所以可以很好地控制用户何时访问它。,结构型模式(7种模式),Adapter适配器(变压器)模式Bridge桥梁模式Composite合成模式Decorator装饰模式Facade门面模式(外观模式)Flyweight享元模式Proxy代理模式,适配器(变压器)模式,将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。模式的结构中包括三种角色:目标(Target)被适配者(Adaptee)适配器(Adapter),适配器(变压器)模式,适配器(变压器)模式,在朋友聚会上碰到了一个香港人Sarah,可我不会说粤语,她不会说普通话,只好求助于我的朋友Mary了,他作为我和Sarah之间的Adapter,让我和Sarah可以相互交谈了。,桥梁方式,将抽象部分与它实现部分分离,使它们都可以独立地变化。模式的结构中包括四种角色:抽象(Abstraction)实现者(Implementor)细化抽象(RefinedAbstraction)具体实现者(ConcreteImplementor),桥梁方式,桥梁方式,指在一个软件系统的抽象化和实现化之间使用组合/聚合关系而不是继承关系,从而使两者可以独立的变化。早上碰到熟人,要说早上好,晚上碰到熟人,要说晚上好;碰到熟人穿了件新衣服,要说你的衣服好漂亮哦,碰到熟人新做的发型,要说你的头发好漂亮哦。“早上碰到熟人新做了个发型怎么说”这种问题,自己用BRIDGE组合一下就行了,合成模式,将对象组合成数形结构以表示“部分-整体”的层次结构。Composite使得用户对单个对象和组合对象的使用具有一致性。模式的结构中包括三种角色:抽象组件(Component)Composite节点(CompositeNode)Leaf节点(LeafNode),合成模式,合成模式,Mary今天过生日。“我过生日,你要送我一件礼物。”“嗯,好吧,去商店,你自己挑。”“这件T恤挺漂亮,买,这条裙子好看,买,这个包也不错,买。”“喂,买了三件了呀,我只答应送一件礼物的哦。”“什么呀,T恤加裙子加包包,正好配成一套呀,小姐,麻烦你包起来。”这就是Composite模式,装饰模式,动态地给对象添加一些额外的职责。就功能来说装饰模式相比生成子类更为灵活。装饰模式的结构中包括四种角色:抽象组件(Component)具体组件(ConcreteComponent)装饰(Decorator)具体装饰(ConcreteDecotator),装饰模式,装饰模式,想要自己做礼物给朋友,拿出去年在华山顶上的照片,在背面写上“最好的的礼物”,再到街上礼品店买了个像框,再找隔壁搞美术设计的朋友设计了一个漂亮的盒子装起来,我们都是Decorator,门面模式(外观模式),为系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。模式的结构中包括两种角色:子系统(Subsystem)外观(Facade),门面模式(外观模式),门面模式(外观模式),我有一个专业的Nikon相机,我就喜欢自己手动调光圈、快门,这样照出来的照片才专业,但奶奶可不懂这些,教了半天也不会。幸好相机有Facade设计模式,把相机调整到自动档,只要对准目标按快门就行了,一切由相机自动调整,这样奶奶也可以用这个相机拍张照片了。外部与一个子系统的通信必须通过一个统一的门面对象进行。,享元模式,运用共享技术有效地支持大量细粒度的对象。模式的结构中包括三种角色:享元接口(Flyweight)具体享元(ConcreteFlyweight)享元工厂(FlyweightFactory),享元模式,享元模式,每天发短信,手指都累死了,最近买了个新手机,可以把一些常用的句子存在手机里,要用的时候,直接拿出来,在前面加上收信人的名字就可以发送了,再不用一个字一个字敲了。共享的句子就是享元,收信人的名字就是提取出来的外部特征,根据上下文情况使用。,享元模式以共享的方式高效的支持大量的细粒度对象。享元模式能做到共享的关键是区分内蕴状态和外蕴状态。内蕴状态存储在享元内部,不会随环境的改变而有所不同。外蕴状态是随环境的改变而改变的。外蕴状态不能影响内蕴状态,它们是相互独立的。,代理模式,为其他对象提供一种代理以控制对这个对象的访问。模式的结构中包括三种角色:抽象主题(Subject)实际主题(RealSubject)代理(Proxy),代理模式,代理模式,跟陌生人在网上聊天,一开头总是“hi,你好”,“你从哪儿来呀?”“你多大了?”“身高多少呀?”这些话,真烦人,写个程序做为我的代理吧,凡是接收到这些话都设置好了自动的回答,接收到其他的话时再通知我回答,这就是代理模式。代理模式给某一个对象提供一个代理对象,并由代理对象控制对源对象的引用。代理就是一个人或一个机构代表另一个人或者一个机构采取行动。,行为型模式(11种模式),ChainOfResponsibility责任链模式Command命令模式Interpreter解释器模式Iterator迭代器模式Mediator调停者模式(中介者模式)Memento备忘录模式Observer观察者模式State状态模式Strategy策略模式TemplateMethod模板方法模式Visitor访问者模式,责任链模式,使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。模式的结构中包括两种角色:处理者(Handler)具体处理者(ConcreteHandler),责任链模式,责任链模式,中学的时候,上自习期间发现自己丢了钱包就写了个纸条问问谁捡到钱包了。纸条就一个接一个的传到前面去了,结果是第一排的同学说他捡到了。在责任链模式中,很多对象由每一个对象对其下家的引用而接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。客户并不知道链上的哪一个对象最终处理这个请求。,命令模式,将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作。模式的结构中包括四种角色:接收者(Receiver)命令(Command)接口具体命令(ConcreteCommand)请求者(Invoker),命令模式,命令模式,有一个朋友家里管得特别严,没法周末一起出来玩,只好借助于她弟弟在我们俩之间传送信息,她告诉我什么时候一起出去玩,就写一张纸条让她弟弟带给我COMMAND。命令模式把一个请求或者操作封装到一个对象中。命令模式把发出命令的责任和执行命令的责任分割开,委派给不同的对象。,解释器模式,给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。模式的结构中包括四种角色:抽象表达式(AbstractExpression)终结符表达式子(TerminalExpression)非终结符表达式子(NonterminalExpression)上下文(Context),解释器模式,解释器模式,我有一本菜谱,上面做每一道菜的详细步骤。自己学着做菜时,只要做一个Interpreter,照着上面的脚本执行就行。给定一个语言后,解释器模式可以定义出其文法的一种表示,并同时提供一个解释器。客户端可以使用这个解释器来解释这个语言中的句子。解释器模式将描述怎样在有了一个简单的文法后,使用模式设计解释这些语句。,迭代器模式,提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。模式的结构中包括四种角色:集合(Aggregate):具体集合(ConcreteAggregate)迭代器(Iterator)具体迭代器(ConcreteIterator),迭代器模式,迭代器模式,一栋楼中住着张三、李四、刘武三个人,分别被安排在不同的房间中,张三知道李四的房间,李四知道刘武的房间。假设有一个警察,他并不知道这些人是以什么方式在此居住,只想找到他们,找到一个人的同时立刻让这个人说出他所知道下一个人所在的房间。这就是迭代器模式。,调停者模式(中介者模式),用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。模式的结构中包括四种角色:中介者(Mediator)具体中介者(ConcreteMediator)同事(Colleague)具体同事(ConcreteColleague),调停者模式(中介者模式),调停者模式(中介者模式),四个朋友打麻将,相互之间谁应该给谁多少钱算不清楚了,幸亏当时我在旁边,按照各自的筹码数算钱,赚了钱的从我这里拿,赔了钱的也付给我,一切就OK啦,这就是中介者模式。,备忘录模式,在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可将该对象恢复到原先保存的状态。模式的结构中包括三种角色:原发者(Originator)备忘录(Memento)负责人(Caretaker),备忘录模式,备忘录模式,同时跟几个好友聊天时,一定要记清楚刚才说了些什么话,幸亏我有个备忘录,刚才与哪个同学说了什么话我都拷贝一份放到备忘录里面保存,这样可以随时察看以前的记录啦。备忘录对象是一个用来存储另外一个对象内部状态的快照的对象。备忘录模式的用意是在不破坏封装的条件下,将一个对象的状态捉住,并外部化,存储起来,从而可以在将来合适的时候把这个对象还原到存储起来的状态。,观察者模式,定义对象间的一种一对多的依赖关系,当一个对象的状态发生变化时,所有依赖于它的对象都得到通知并被自动更新。观察者模式的结构中包括四种角色:主题(Subject)观察者(Observer)具体主题(ConcreteSubject)具体观察者(ConcreteObserver),观察者模式,观察者模式,想知道咱们公司情报吗?加入公司的情报邮件组就行了,tom负责搜集情报,他发现的新情报不用一个一个通知我们,直接发布给邮件组,我们作为订阅者(观察者)就可以及时收到情报啦。观察者模式定义了一种一队多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使他们能够自动更新自己。,状态模式,允许一个对象在其内部状态改变时改变它的行为。模式的结构中包括三种角色:环境(Context)抽象状态(State)具体状态(ConcreteState),状态模式,状态模式,跟朋友交往时,一定要注意他的状态,在不同的状态时他的行为会有不同。如果你约他今天晚上去看电影,晚上要去聚餐的朋友就会说“有事情啦”,有时间的朋友就会说“好啊”。状态模式的意图是让一个对象在其内部状态改变的时候,其行为也随之改变。,策略模式,定义一系列算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。策略模式的结构中包括三种角色:策略(Strategy)具体策略(ConcreteStrategy)上下文(Context),策略模式,策略模式,请不同类型的客户吃饭,要用不同的策略,有
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025装修合同北京范本
- 2025标准房屋买卖合同
- 2025房产交易补充合同条款
- 2025有关代理参展订货合同模板
- 店铺拆除承揽合同范本
- 地皮出售协议合同范本
- 广告产品购销合同范本
- 2025济南市肉鸡委托饲养合同书
- 商品仓储物流合同范本
- 树木购销售合同范本
- 2025年燃气电厂笔试题库及答案
- 2025年道路运输两类人员安全员考试考核试题库答案
- 2025年学法减分试题及答案
- 《智能建造概论》高职完整全套教学课件
- GB/T 30807-2025建筑用绝热制品浸泡法测定长期吸水性
- 超声科进修学习汇报
- 2024年甘肃省舟曲县邮政公开招聘工作人员试题带答案详解
- 2025年小学英语(2022版)新课程标准考试测试卷及答案(共四套)
- (高清版)DB34∕T 5193-2025 河流水生态监测技术规范
- 2025年德语DSH考试试卷德语语法练习与解析
- 肥料行业车间管理制度
评论
0/150
提交评论