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