24种设计模式及案例Word下载.docx
- 文档编号:20273239
- 上传时间:2023-01-21
- 格式:DOCX
- 页数:30
- 大小:38.94KB
24种设计模式及案例Word下载.docx
《24种设计模式及案例Word下载.docx》由会员分享,可在线阅读,更多相关《24种设计模式及案例Word下载.docx(30页珍藏版)》请在冰豆网上搜索。
HTTP'
,能够把这三个作为产品类,共同实现一个接口。
妇欒頹饩馁镑試誰脓瘍滗鵜鲳貞怿。
注意事项:
作为一种创立类模式,在任何需要生成复杂对象
的地方,都能够使用工厂方法模式。
有一点需要注意的地方
就是复杂对象适合使用工厂模式,而简单对象,特别是只需
要经过new就能够达成创立的对象,无需使用工厂模式。
烦浇潆綣砗赣摅賞員饴觊桧陸绡鷦。
假如使用工厂模式,就需要引入一个工厂类,会增添系统的
复杂度。
抽象工厂模式
抽象工厂模式(AbstractFactoryPattern)是环绕一个超级工厂创立其余工厂。
该超级工厂又称为其余工厂的工厂。
釓张蕴贱穎櫥贬劝潍铥濑况稣执瑶。
在抽象工厂模式中,接口是负责创立一个有关对象的工厂,不需要显式指定它们的类。
每个生成的工厂都能依照工厂模式供应对象。
馀憲鰹镧谇歟涟颉纨寧驅浆蓯猶嬪。
供应一个创立一系列有关或相互依靠对象的接口,而无需指定它们详细的类。
潁鰥縣骀顺鹘閡尽鹳讀擼硨換衬嬋。
系统的产品有多于一个的产品族,而系统只花费此中某一族的产品。
在一个产品族里面,定义多个产品。
駭极獻鍇缳槟鉞睜姍癫諱狯競绍摯。
在一个工厂里聚合多个同类产品。
工作了,为了参加一些聚会,必定有两套或多套
衣服吧,比方说有商务装(成套,一系列详细产品)、时髦装(成套,一系列详细产品),甚至关于一个家庭来说,可能有商务女装、商务男装、时髦女装、时髦男装,这些也都
钓靓麦潯頭櫬窦噦弯處犊錫龜携蔞。
是成套的,即一系列详细产品。
假定一种状况(现实中是不存在的,要不然,无法进入共产主义了,但有益于说明抽象工厂模式),在您的家中,某一个衣柜(详细工厂)只能存顺冪販嚌烂烟酝鲧頒诳逦勛奁檔毁。
放某一种这样的衣服(成套,一系列详细产品),每次拿这
种成套的衣服时也自然要从这个衣柜中拿出了。
用OO的
思想去理解,全部的衣柜(详细工厂)都是衣柜类的(抽象
工厂)某一个,而每一件成套的衣服又包含详细的上衣(某
一详细产品),裤子(某一详细产品),这些详细的上衣其实
也都是上衣(抽象产品),详细的裤子也都是裤子(另一个
抽象产品)。
当一个产品族中的多个对象被设计成一同工作时,它能保证客户端一直只使用同一个产品族中的对象。
产品族扩展特别困难,要增添一个系列的某一产品,
既要在抽象的Creator里加代码,又要在详细的里面加代码。
1、QQ换皮肤,一整套一同换。
2、生成不一样操作系统的程序。
誒薈瀘鎳鵪赎謫謊薔攆內澗现監桨。
产品族难扩展,产品等级易扩展。
单例模式
单例模式(SingletonPattern)是Java中最简单的设计模式之一。
镀孙鋃蠻鏤饜賈阳钴恋钊鯡裤怿鷺。
这类模式波及到一个单调的类,该类负责创立自己的对象,同时保证只有单个对象被创立。
这个类供应了一种接见其唯
琿攝毿挚泷墾讵儻黩窜榉馳铺资惩。
一的对象的方式,能够直接接见,不需要实例化该类的对象。
注意:
1、单例类只能有一个实例。
2、单例类一定自己创立自己的独一实例。
3、单例类一定给全部其余对象供应这一实例。
保证一个类仅有一个实例,并供应一个接见它的全局接见点。
一个全局使用的类屡次地创立与销毁。
娲调癇陆时語屬惮蹺饮枥锼贝邓偿。
当您想控制实例数目,节俭系统资源的时候。
判断系统能否已经有这个单例,假如有则返回,假如没有则创立。
鲧鉉獰毂侬畬槨懸釀橥悬隶耸漚鷦。
结构函数是私有的。
1、一个党只能有一个主席。
2、Windows是多进度多线程的,在操作一个文件的时候,就不行防止地出现多个进度或线程同时操作一个文件的现象,所以全部文件
的办理一定经过独一的实例来进行。
3、一些设施管理器常常设计为单例模式,比方一个电脑有两台打印机,在输出的时候就要办理不可以两台打印机打印同一个文件。
從獼鵲罴許计袜轟状諢儲陣虾鉗馒。
1、在内存里只有一个实例,减少了内存的开支,尤
其是屡次的创立和销毁实例(比方管理学院首页页面缓存)。
2、防止对资源的多重占用(比方写文件操作)。
没有接口,不可以继承,与单调职责原则矛盾,一个类
应当只关怀内部逻辑,而不关怀外面怎么样来实例化。
1、要求生产独一序列号。
2、WEB中的计数
器,不用每次刷新都在数据库里加一次,用单例先缓存起来。
3、创立的一个对象需要耗费的资源过多,比方I/O与数据
库的连结等。
getInstance()方法中需要使用同步锁
synchronized(Singleton.class)防备多线程同时进入造成
instance被多次实例化。
建筑者模式(建立者模式)
建筑者模式(BuilderPattern)使用多个简单的对象一步一步建立成一个复杂的对象。
鹈热輕規淚鸶蔭诅濫颤緲课铩实玺。
一个Builder类会一步一步结构最后的对象。
该Builder类是独立于其余对象的。
将一个复杂的建立与其表示相分别,使得相同的建立过程能够创立不一样的表示。
主要解决在软件
撿頁鸢鹬坛钮篓呂镓挥螢潁逦饞谩。
系统中,有时面对着'
一个复杂对象'
的创立工作,其往常由各个部分的子对象用必定的算法组成;
因为需求的变化,这
邇鎪鹆蛲閑轎郦艤懍蜕講陇証宁鱟。
个复杂对象的各个部分常常面对着强烈的变化,可是将它们组合在一同的算法却相对稳固。
一些基本零件不会变,而其组合常常变化的时候。
将变与不变分别开。
建筑者:
创立和供应实例,导演:
管理建筑出来的实例的依靠关系。
1、去肯德基,汉堡、可乐、薯条、炸鸡翅等是
不变的,而其组合是常常变化的,生成出所谓的'
套餐'
。
2、
JAVA中的StringBuilder。
1、建筑者独立,易扩展。
2、便于控制细节风险。
1、产品一定有共同点,范围有限制。
2、如内部变化复杂,会有好多的建筑类。
1、需要生成的对象拥有复杂的内部结构。
2、需要生成的对象内部下性自己相互依靠。
与工厂模式的差别是:
建筑者模式更为关注与零
件装置的次序。
原型模式
原型模式(PrototypePattern)是用于创立重复的对象,同时又能保证性能。
诮畅執尽傥绦猻鴨筛紆馈奧婭骗钜。
这类模式是实现了一个原型接口,该接口用于创立目前对象
的克隆。
当直接创立对象的代价比较大时,则采纳这类模式。
比如,一个对象需要在一个高代价的数据库操作以后被创立。
我们能够缓存该对象,在下一个恳求时返回它的克隆,在需要的时候更新数据库,以此来减少量据库调用。
礬韙医棧偾贖辗飭镇礦阄顎镌蔥閭。
用原型实例指定创立对象的种类,并且经过拷贝这些原型创立新的对象。
在运转期成立和删除原型。
鸛蔼惱颡葷騸繼諑鍬騖鐃環遠巅資。
1、当一个系统应当独立于它的产品创立,组成
和表示时。
2、当要实例化的类是在运转时辰指准时,比如,
经过动向装载。
3、为了防止创立一个与产品类层次平行的
工厂类层次时。
4、当一个类的实例只能有几个不一样状态组
合中的一种时。
成立相应数目的原型并克隆它们可能比每次
用适合的状态手工实例化该类更方便一些。
利用
已有的一个原型对象,迅速地生成和原型对象相同的实例。
1、实现克隆操作,在JAVA继承Cloneable,重写clone(),在.NET中能够使用Object类的
MemberwiseClone()方法来实现对象的浅拷贝或经过序列罌坛鎩孿馴諷幣滄饉栌馁浏榄颔屿。
化的方式来实现深拷贝。
2、原型模式相同用于隔绝类对象
的使用者和详细种类(易变类)之间的耦合关系,它相同要
求这些'
易变类'
拥有稳固的接口。
1、细胞分裂。
2、JAVA中的Objectclone()
法。
1、性能提升。
2、躲避结构函数的拘束。
1、装备克隆方法需要对类的功能进行全盘问虑,这
方
关于崭新的类不是很难,但关于已有的类不必定很简单,特别当一个类引用不支持串行化的间接对象,或许引用含有循环结构的时候。
2、一定实现Cloneable接口。
韓齠挟問龟輥唄击鏝钥瀟魘凤樹籃。
资源优化场景。
类初始化需要消化特别多的资
源,这个资源包含数据、硬件资源等。
性能和安全要求的
场景。
经过new产生一个对象需要特别繁琐的数据准备或
接见权限,则能够使用原型模式。
一个对象多个改正者的场景。
一个对象需要供应给其余对象接见,并且各个调用者可能都需要改正其值时,能够考虑使用原型模式拷贝多个对象供调用者使用。
在实质项目中,原型模式极少独自出
练谦砾邊詁鰳銓肠删歸缏铪电肤轮。
现,一般是和工厂方法模式一同出现,经过clone的方法创立一个对象,而后由工厂方法供应给调用者。
原型模式已经
肮鯨蚀镔涠詿閭惭闲临豈构闩鲒沥。
与Java融为水乳交融,大家能够顺手拿来使用。
与经过对一个类进行实例化来结构新对象不一样的是,原型模式是经过拷贝一个现有对象生成新对象的。
浅拷
贝实现Cloneable,重写,深拷贝是经过实现Serializable
脍疯扬织廟鲂杨練诚寢极隉濘攛锆。
读取二进制流。
结构型模式
适配器模式
适配器模式(AdapterPattern)是作为两个不兼容的接口之间的桥梁。
这类种类的设计模式属于结构型模式,它联合了两个独立接口的功能。
碜數锲蚁領緹鲷诘剧亚鹊铽骛點儈。
这类模式波及到一个单调的类,该类负责加入独立的或不兼容的接口功能。
举个真切的例子,读卡器是作为内存卡和笔录本之间的适配器。
您将内存卡插入读卡器,再将读卡器插入笔录本,这样就能够经过笔录原来读取内存卡。
鷯漿桡鑌盐腸鱼烛颼絳暫燦倾蒋讯。
我们经过下边的实例来演示适配器模式的使用。
此中,音频
播放器设施只能播放mp3文件,经过使用一个更高级的音
频播放器来播放vlc和mp4文件。
将一个类的接口变换成客户希望的此外一个接口。
适配器模式使得本来因为接口不兼容而不可以一同工作的那
些类能够一同工作。
主要解决在软件系统中,常
常要将一些'
现存的对象'
放到新的环境中,而新环境要求的接
口是现对象不可以知足的。
1、系统需要使用现有的类,而此类的接口不切合系统的需要。
2、想要成立一个能够重复使用的类,用于与一些相互之间没有太大关系的一些类,包含一些可能在将
憲鈮諄臠栎愤紺吨顸帳潍缜办驻覺。
来引进的类一同工作,这些源类不必定有一致的接口。
3、
经过接口变换,将一个类插入另一个类系中。
(比方老虎和
飞禽,此刻多了一个飞虎,在不增添实体的需求下,增添一
个适配器,在里面包含一个虎对象,实现飞的接口。
)怎样
解决:
继承或依靠(介绍)。
适配器继承或依靠已有的对象,实现想要的目标
接口。
1、美国电器
110V,中国
220V,就要有一个
适配器将
110V转变为
220V
2、JAVAJDK供应了
Enumeration接口,而在
中供应了
Iterator
接口,想
要使用
的JDK,则要将从前系统的
Enumeration接口
转变为
Iterator接口,这时就需要适配器模式。
3、在
LINUX
上运转WINDOWS程序。
4、JAVA中的jdbc。
1、能够让任何两个没有关系的类一同运转。
2、提
高了类的复用。
3、增添了类的透明度。
4、灵巧性好。
1、过多地使用适配器,会让系统特别凌乱,不易整
体进行掌握。
比方,明显看到调用的是
A接口,其实内部
被适配成了B接口的实现,一个系统假如太多出现这类情
况,无异于一场灾害。
所以假如不是很有必需,能够不使用
适配器,而是直接对系统进行重构。
2.因为JAVA
至多继
承一个类,所以致多只能适配一个适配者类,并且目标类一定是抽象类。
有动机地改正一个正常运转的系统的接口,这时应当考虑使用适配器模式。
适配器不是在详尽设计时增添的,而是解决正在服役的项目的问题。
装修器模式
装修器模式(DecoratorPattern)同意向一个现有的对象增添新的功能,同时又不改变其结构。
这类种类的设计模式属于结构型模式,它是作为现有的类的一个包装。
贱訃釁组擞机气夠归卢赃骡淨鍰载。
这类模式创立了一个装修类,用来包装原有的类,并在保持类方法署名完好性的前提下,供应了额外的功能。
我们经过下边的实例来演示装修器模式的用法。
此中,我们将把一个形状装修上不一样的颜色,同时又不改变形状类。
蹤闸铨鷙釋綏盜间頦矯鐃靜揮鹁螄。
动向地给一个对象增添一些额外的职责。
就增添功能来说,装修器模式对比生成子类更为灵巧。
一般的,我们为了扩展一个类常常使用继承方式实现,因为继承为类引入静态特点,并且跟着扩展功能的增加,子类会
肅輞鉚靜蔺缌鋌咙鐨怜虾鉚鄲軺驻。
很膨胀。
在不想增添好多子类的状况下扩展类。
怎样解决:
将详细功能职责区分,同时继承装修者模式。
1、Component类充任抽象角色,不该当详细
实现。
2、修饰类引用和继承Component类,详细扩展类
重写父类方法。
1、孙悟空有72变,当他变为'
庙宇'
后,他的
根本仍是一只猴子,可是他又有了庙宇的功能。
2、无论一
幅画有没有画框都能够挂在墙上,可是往常都是有画框的,并且其实是画框被挂在墙上。
在挂在墙上从前,画能够被蒙上玻璃,装到框子里;
这时画、玻璃和画框形成了一个物体。
嗎雙諛瑩攝帱娱赊蛱苏浑厭貧胆敘。
装修类和被装修类能够独立发展,不会相互耦合,装修模式是继承的一个代替模式,装修模式能够动向扩展一个实现类的功能。
镛謨綽嘍駕错贬鏇纤廢蕆辘泺腎涝。
多层装修比较复杂。
1、扩展一个类的功能。
2、动向增添功能,动向撤除。
可取代继承。
代理模式
在代理模式(ProxyPattern)中,一个类代表另一个类的功能。
这类种类的设计模式属于结构型模式。
貧蘿壶闈腳鏞铠擊贞语飽瀲圓譙难。
在代理模式中,我们创立拥有现有对象的对象,以便向外界供应功能接口。
为其余对象供应一种代理以控制对这个对象的接见。
在直接接见对象时带来的问题,比方说:
要接见的对象在远程的机器上。
在面向对象系统中,有些对象因为某些原由(比方对象创立开支很大,或许某些操作需要安全控制,或许需要进度外的接见),直接接见会给使用者或许系统结构带来好多麻烦,我们能够在接见此对象时加上一个对此对象的接见层。
鎧飨岭減荥张匦秃蝕屜铿钣镔憊鏹。
想在接见一个类时做一些控制。
增添中间层。
实现与被代理类组合。
Windows里面的快捷方式。
猪八戒去找高翠兰结果是孙悟空变的,能够这样理解:
把高翠兰的相貌抽象出来,高翠兰自己和孙悟空都实现了这个接口,猪八戒接见高翠兰的时候看不出来这个是孙悟空,所以说孙悟空是高翠兰代理类。
买火车票不必定在火车站买,也能够去代售点。
一张支票或银行存单是账户中资本的代理。
支票在市场交易中體鐘羋鮭鐫悵脑哕學笾跞嶗鲽缕荪。
用来取代现金,并供应对签发人账号上资本的控制。
spring
aop。
1、职责清楚。
2、高扩展性。
3、智能化。
因为在客户端和真切主题之间增添了代理对象,所以有些种类的代理模式可能会造成恳求的办理速度变慢。
实现代理模式需要额外的工作,有些代理模式的实现特别复杂。
贰鵯产嘮貰鶯養归芻殇塵轨蛴穌选。
按职责来区分,往常有以下使用处景:
1、远程代理。
2、虚构代理。
3、Copy-on-Write代理。
4、保护
ProtectorAccess)代理。
5、Cache代理。
6、防火墙
诶緶骥牺閭紗趕态銀噜統瑤鴝奁鲥。
Firewall)代理。
7、同步化(Synchronization)代理。
8、智能引用(SmartReference)代理。
瑶攏獺渍郏浇馆驗赝啞叁篳栏鱉谀。
和适配器模式的差别:
适配器模式主要改变所
考虑对象的接口,而代理模式不可以改变所代理类的接口。
和装修器模式的差别:
装修器模式为了加强功能,而代理模式
氫轎鹬徹憲阶閣冁匭顷卢莴異誅澤。
是为了加以控制。
外观模式
外观模式(FacadePattern)隐蔽系统的复杂性,并向客户端供应了一个客户端能够接见系统的接口。
这类种类的设计模式属于结构型模式,它向现有的系统增添一个接口,来隐蔽系统的复杂性。
嵐缯膑阒蝼刭銳贱绶懇蘚鴻繚冻鹎。
这类模式波及到一个单调的类,该类供应了客户端恳求的简化方法和对现有系统类方法的拜托调用。
为子系统中的一组接口供应一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更为简单使用。
降低接见复杂系统的内部子系统时的复杂度,简化客户端与之的接口。
廠闻壘缎嚕駒昼责謎闖捞馊鹤浆詵。
客户端不需要知道系统内部的复杂联系,整个
系统只需供应一个'
招待员'
即可。
定义系统的进口。
客户端不与系统耦合,外观类与系统耦合。
亩熾冈脏赕頏谘赏辎脔撫賠縶纱覬。
在客户端和复杂系统之间再加一层,这一层将调用次序、依靠关系等办理好。
去医院看病,可能要去挂号、门诊、划价、取药,让患者或患者家眷感觉很复杂,假如有供应招待人员,
痹漵飽齋礙呂蟯麦蘭櫟終搶绠潁闸。
只让招待人员来办理,就很方便。
JAVA的三层开发模式。
1、减少系统相互依靠。
2、提升灵巧性。
3、提升了安全性。
不切合开闭原则,假如要改东西很麻烦,继承重写都不适合。
绯羆齊賾啞蠅诩珏呜濤刿动邹亩價。
为复杂的模块或子系统供应外界接见的模块。
子系统相对独立。
预防低水平人员带来的风险。
在层次化结构中,能够使用外观模式定义系统中
每一层的进口。
桥接模式
桥接(Bridge)是用于把抽象化与实现化解耦,使得两者可
以独立变化。
这类种类的设计模式属于结构型模式,它经过供应抽象化和实现化之间的桥接结构,来实现两者的解耦。
这类模式波及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。
这两种种类的类可被结构化改变而互不影响。
鐵趱闸著鐳饶閭韌惯娈办厙紐慟秘。
我们经过下边的实例来演示桥接模式(BridgePattern)的用法。
此中,能够使用相同的抽象类方法可是不一样的桥接实现类,来画出不一样颜色的圆。
莱種赋萦滚雏擯赕苹繕鈹宮馒攖餑。
将抽象部分与实现部分分别,使它们都能够独立的变化。
在有多种可能会变化的状况下,用继承会造成类爆炸问题,扩展起来不灵巧。
厌穷鸷趨坟語孙酽繰屡漲沥糴诵廳。
实现系统可能有多个角度分类,每一种角度都可能变化。
把这类多角度分类分别出来,让它们独立变化,减少它们之间耦合。
羨题谂緲駒庫荞噯櫸飛叶顾緶厦层。
抽象类依靠实现类。
猪八戒从天蓬元帅转世投胎到猪,转世投胎的体制将凡间区分为两个等级,即:
灵魂和肉体,前者相当于抽象化,后者相当于实现化。
生灵经过功能的委派,调用肉体对象的功能,使得生灵能够动向地选择。
墙上的开关,能够看到的开关是抽象的,不用管里面详细怎么实现的。
惱櫻銦萧悅竅鲳間陸駁繾驯惨繼襉。
1、抽象和实现的分别。
2、优异的扩展能力。
3、实现细节对客户透明。
桥接模式的引入会增添系统的理解与设计难度,因为
聚合关系关系成立在抽象层,要求开发者针对抽象进行设计
与编程。
假如一个系统需要在构件的抽象化角色和详细
化角色之间增添更多的灵巧性,防止在两个层次之间成立静
态的继承联系,经过桥接模式能够使它们在抽象层成立一个
关系关系。
关于那些不希望使用继承或因为多层次继承导
致系统类的个数急剧增添的系统,桥接模式尤其合用。
一
个类存在两个独立变化的维度,且这两个维度都需要进行扩
展。
关于两个独立变化的维度,使用桥接模式再适合
可是了。
组合模式
组合模式(CompositePattern),又叫部分整体模式,是用
于把一组相像的对象看作一个单调的对象。
组合模式依照树
形结构来组合对象,用来表示部分以及整体层次。
这类种类
的设计模式属于结构型模式,它创立了对象组的树形结构。
这类模式创立了一个包含自己对象组的类。
该类供应了改正
相同对象组的方式。
我们经过下边的实例来演示组合模式的
用法。
实例演示了一个组织中职工的层次结构。
将对象组合成树形结构以表示
'
部分-整体'
的层次
结构。
组合模式使得用户对单个对象和组合对象的使用拥有
一致性。
它在我们树型结构的问题中,模糊了简单元素和复杂元素的观
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 24 设计 模式 案例
![提示](https://static.bdocx.com/images/bang_tan.gif)