软件设计模式
文章平均质量分 85
深秋红枫
卑微大学生,在线挨打。
完全新手,求大佬们指导,还请不要手下留情。
展开
-
观察者模式、中介者模式
观察者模式(Observer)模式定义:指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。优缺点优点:降低了目标与观察者之间的耦合关系,两者之间是抽象耦合关系;目标与观察者之间建立了一套触发机制缺点:目标与观察者之间的依赖关系并没有完全解除,而且有可能出现循环引用;当观察者对象很多时,通知的发布会花费很多时间,影响程序的效率。应用场景对象间存在一对多关系,一个对象的状态发生改变会影响其它对象;当一个抽象模式有两个方面,其中原创 2021-01-09 19:50:41 · 523 阅读 · 0 评论 -
备忘录模式、解释器模式
备忘录(Menento)模式定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后当需要的时候能将该对象恢复到原先保存的状态。该模式又叫快照模式。优缺点优点:提供了一种可以回复状态的机制。用户当需要时能够比较方便地将数据恢复到某个历史的状态。实现了内部状态的封装。除了创建它的发起人之外的其它对象都不能够访问这些状态信息。简化了发起人类。发起人不需要管理和保存其内部状态的各个备份,所有状态信息都保存在备忘录中,并由管理员进行管理,这符合单一职责原则。缺点:原创 2020-12-13 14:37:37 · 201 阅读 · 0 评论 -
迭代器模式、访问者模式
迭代器模式定义:提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合时对象的内部表示。优缺点优点:访问一个聚合对象的内容而无需暴露它的内部表示;遍历任务交由迭代器完成,这简化了聚合类;它支持以不同方式遍历一个聚合,甚至可以自定义迭代器的子类以支持新的遍历;增加新的聚合类和迭代器类都很方便,无须修改原有的代码;封装性良好,为遍历不同的聚合结构提供了一个统一的接口。缺点:增加了类的个数,在一定程度上增加了系统的复杂性。应用场景当需要为聚合对象提供多种遍历方式时。当需要为遍历不原创 2020-12-06 11:08:03 · 447 阅读 · 0 评论 -
责任链模式、状态模式
责任链模式定义:为了避免请求发送者与多个请求处理者耦合在一起,将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条传递链,知道有对象处理它为止。优缺点优点:降低了对象之间的耦合度。该模式使得一个对象无需知道是哪一个对象处理其请求以及链的结构,发送者和接收者也无需拥有对方明确的消息。增强了系统的可扩展性。可以根据需要增加新的请求处理类,满足开闭原则;增强了给对象指派职责的灵活性。当工作流程发生变化,可以动态地改变链内的成员或者调动他们的次序,也可以动原创 2020-12-06 10:04:27 · 684 阅读 · 0 评论 -
命令模式
命令模式定义:将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象进行沟通,这个方法将命令对象进行存储、传递、调用、增加与管理。优缺点优点:降低系统的耦合度。命令模式能将调用操作的对象与实现该操作的对象解耦。增加或删除命令非常方便。采用命令模式增加与删除命令不会影响其它类,它满足“开闭原则”,对扩展比较灵活。可以实现宏命令。命令模式可以与组合模式结合,将多个命令装配成一个组合命令,即宏命令。方便实现Undo和Redo操作。命令模式可以与后面章节介绍的备忘原创 2020-11-12 10:06:50 · 83 阅读 · 0 评论 -
模板方法、策略方法
模板方法定义:定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重新定义该算法的某些特定步骤。它是一种类行为型模式。优缺点优点:它封装了不可变部分,扩展可变部分。它把认为是不可变部分的算法封装到父类中实现,而把可变部分算法由子类继承实现,便于子类继续扩展;它在父类中提取了公共的部分代码,便于代码复用;部分方法是由子类实现的,因此子类可以通过扩展方式增加相应的功能,符合开闭原则。缺点:对每个不同的实现都需要定义一个子类,这会导致类的个数增加,系原创 2020-11-12 09:37:48 · 344 阅读 · 0 评论 -
享元模式和组合模式
享元模式##定义运用共享技术来有效地支持大量细粒度对象的复用,它通过共享已经存在的对象来提高系统资源利用率。优缺点优点:相同对象只要保存一份,这降低了系统中对象的数量,从而降低了系统中细粒度对象给内存带来的压力。缺点:为了使对象可以共享,需要将一些不能共享的状态外部化,这将增加程序的复杂性。读取象原模式的外部状态会使得运行时间稍微变长。应用场景系统中存在大量相同或相似的对象,这些对象耗费大量的内存资源;大部分的对象可以按照内部状态进行分组,且可以将不同部分外部化,这样每一个组只需保原创 2020-10-25 16:50:37 · 198 阅读 · 2 评论 -
装饰模式和外观模式
装饰模式定义指在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式,它属于对象结构模式优点采用装饰模式扩展对象的功能比采用继承方式更加灵活可以设计出多个不同的具体装饰类,创造出多个不同行为的组合缺点装饰模式增加了许多子类,如果过度使用会使程序变得很复杂主要角色抽象构件(Component)角色:定义一个抽象借口以规范准备接受附加责任的对象具体构件(Concrete Component)角色:实现抽象构件,通过装饰角色为其增加一些职责抽象装饰(De原创 2020-10-24 16:32:28 · 438 阅读 · 0 评论 -
代理模式、适配器模式、桥接模式
结构型模式代理(Proxy)模式简介:为某对象提供一红代理以控制该对象的访问。即客户端通过代理简介地访问该对象,从而限制、增强或修改该对象的一些特性。定义:由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时,访问对象不适合或者不能直接引用对象,代理对象作为访问对象和目标对象之间的中介。优点:代理模式在客户端与目标对象之间起到一个中介作用和保护目标对象的作用。代理对象可以扩展目标对象的功能。代理模式能将客户端与目标对象分离,在一定程度上降低了系统的耦合度。缺点:在客户端和目原创 2020-09-29 11:27:13 · 377 阅读 · 0 评论 -
工厂方法模式+抽象工厂模式+建造者模式
工厂方法模式工厂方法模式的定义定义:定义一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子工厂类当中。这满足创建型模式中所要求的创建与使用相分离的特点。如果要创建的产品不多,只要一个工厂类就可以完成,这种模式叫“简单工厂模式”结构图工厂方法模式的主要角色1)抽象工厂(Abstract Factory):提供了创建产品的接口,调用者通过它访问具体工厂的工厂方法newProduct()来创建产品。2)具体工厂(Concrete Factory):主要是实现抽象工厂中的抽象方法,完原创 2020-09-23 16:58:01 · 632 阅读 · 0 评论