![](https://img-blog.csdnimg.cn/20191101174842300.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
设计模式
两眼墨黑
雪白明月照着大地
展开
-
桥梁模式-23种设计模式
类型:【结构类】类图:描述: 桥梁模式也叫桥接模式,是一种比较简单的模式。定义:将抽象和实现解耦,使两者可以独立的变化。优点:抽象和实现分离;这也是桥梁模式的主要特点,它完全是为了解决继承的缺点而提出的设计模式。在该模式下,实现可以不受抽象的约束,不用再绑定在一个固定的抽象层次上。 优秀的拓展能力;既可以增加实现,又可以增加抽象,只要对外暴露的接口层允许这样的...原创 2019-11-01 17:06:15 · 310 阅读 · 0 评论 -
中介者模式-23种设计模式
类型:【行为类】类图:描述: 用一个中介对象封装一系列的对象的交互,中介者使各个对象不需要显示地相互作用,从而使其耦合松散,而且可以独立地改变它们之间的交互。优点: 中介者模式的优点就是减少类间的依赖,把原来的一对多的依赖变成一对一的依赖,同事类只依赖中介者,减少了依赖,当然同时也降低了类间的耦合。缺点: 中介者的缺点就是中介者会...原创 2019-09-17 14:49:20 · 105 阅读 · 0 评论 -
命令模式-23种设计模式
类型:【行为类】类图:描述: 将一个请求封装成一个对象,从而让你使用不用的请求把客户端数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。优点:类间解耦。调用者角色与接受者之间没有任何依赖关系,调用者实现功能时只需调用Command抽象类的execute方法就可以,不需要了解到底是哪个接受者执行。 可拓展性。Command的子类可以非常容易地拓展,...原创 2019-09-17 15:22:44 · 87 阅读 · 0 评论 -
责任链模式-23种设计模式
类型:【行为型】类图:描述: 使多个对象都有机会处理请求,从而避免了请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止。优点: 责任链模式非常显著的优点是将请求和处理分开。请求者可以不用知道是谁处理的,处理者可以不用知道请求的全貌,两者解耦,提高系统的灵活性。缺点: 责任链有两个...原创 2019-09-17 15:43:11 · 81 阅读 · 0 评论 -
观察者模式-23种设计模式
类型:【行为型】类图:描述: 观察者模式(发布订阅模式)定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新。优点:观察者和被观察者之间是抽象耦合。如此设计,则不管是增加观察者还是被观察者都非常容易拓展,而且在java中都已经实现的抽象层级的定义,在系统拓展方面更是得心应手 建立一套触发机制。根据单一职责原则,...原创 2019-09-18 11:56:51 · 106 阅读 · 0 评论 -
门面模式-23种设计模式
类型:【结构类】类图:描述: 门面模式要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。门面模式提供一个高层次的接口,使得子系统更易于使用。优点:减少系统的相互依赖。外界访问直接深入到子系统内部,相互之间是一种强耦合关系,你挂我就挂,这种强依赖是系统设计所不能接受的,门面模式就很好地解决了这个问题,所有的依赖都是门面对象的依赖,与子系统无关。 提高了...原创 2019-09-19 08:58:14 · 149 阅读 · 0 评论 -
备忘录模式-23种设计模式
类型:【行为类】类图:描述: 备忘录模式,在不破坏封装性的前提下,捕获一个对象的内部状态,并且该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。使用场景:需要保存和恢复数据的相关状态场景 提供一个可回滚的操作, 需要监控的副本场景中。eg,监控一个对象的属性,实时性不要求,可考虑备忘录模式 数据库连接的事务管理就是用的备忘录模式注意事项:...原创 2019-09-19 11:50:03 · 182 阅读 · 0 评论 -
访问者模式-23中设计模式
类型:【行为类】类图:描述: 访问者模式,封装一些作用于某些数据结构中的各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。优点:符合单一职责原则。具体元素角色也就是Employee抽象类的两个子类负责数据的加载,而Visitor类则负责报表的展现。两个不同的职责非常明确地分离开来,各自演绎变化 优秀的拓展性。由于职责的分开,继续增加对数...原创 2019-09-20 11:32:36 · 57 阅读 · 0 评论 -
状态模式-23种设计模式
类型:【行为类】类图:描述: 状态模式,当一个对象内在状态改变时允许其改变行为,这个对象看起来像改变了其类。优点:结构清晰。避免了过多的switch...case或者if...else语句的使用,避免了程序的复杂性,提高系统的可维护性 遵循设计原则。遵循开闭原则和单一职责原则,每个状态就是一个子类 封装性非常好。状态的变换放置到类的内部来实现,外部的调用不用知...原创 2019-09-23 18:00:42 · 97 阅读 · 0 评论 -
解释器模式-23种设计模式
类型:【行为型】类图:描述: 解释器模式,给定一门语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。优点: 解释器是一个简单语法分析工具,它最显著的优点就是拓展性,修改语法规则只要修改相应的非终结符表达式就可以了,若拓展语法,则只要增加非终结符类就可以了。缺点:解释器模式会引起类膨胀。每个语法都要产生一个非终...原创 2019-09-25 11:25:30 · 101 阅读 · 0 评论 -
享元模式-23种设计模式
类型:【结构型】类图:描述: 享元模式是池技术的重要实现方式。使用共享对象可有效地支持大量的细粒度的对象。优点: 享元模式是一个非常简单的模式,它可以大大减少应用程序创建的对象,降低程序内存的占用,增强程序的性能。缺点: 它提高了系统的复杂性,需要分离出外部状态和内部状态,而且外部状态具有固话特性,不应该随内部状态的改变而改变,否...原创 2019-09-30 15:01:58 · 91 阅读 · 0 评论 -
原型模式--23种设计模式
类型:【创建类】类图:描述: 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。优点:性能优良。原型模式是在内存二进制流的拷贝,要比直接new一个对象性能好很多,特别是要在一个循环体内产生大量的对象时,原型模式可以更好地体现其优点 逃避构造函数的约束。直接在内存中拷贝,构造函数式不会执行的,优缺点斟酌使用场景:资源优化场景。类初始化需要消化...原创 2019-09-17 14:25:52 · 70 阅读 · 0 评论 -
代理模式-23种设计模式
类型:【结构类】类图:描述: 为其他对象提供一种代理以控制对这个对象的访问优点:职责清晰。真实的角色就是实现实际业务逻辑,不用关心其他非本职务的事物,通过后期的代理完成一件事物,附带的结果就是编程简洁清晰 高拓展性。具体的主题角色是随时都会发生变化的,只要它实现了借口,那我们的代理类完全就可以在不做任何修改的情况相下使用 智能化。eg struts把表单的单...原创 2019-09-17 14:02:16 · 118 阅读 · 0 评论 -
建造者模式-23种设计模式
类型:【创建型】类图·:描述: 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。优点:封装性 建造者模式,容易拓展。建造者相互独立,对系统的拓展非常有利 便于控制细节风险。建造者相互独立,可以对建造过程逐步细化,不影响其他模块使用场景:相同的方法,不同的执行顺序,产生不同的事件结果时,可以采用建造者模式。 多个部件或零件,都...原创 2019-09-16 15:40:45 · 93 阅读 · 0 评论 -
策略模式-23种设计模式
类型:【行为型】类图:描述: 策略模式是定义一组算法,将每个算法都封装起来,并且使它们之间可以相互转换。特点:优点:算法可以随意切换 避免使用多重条件判断 拓展性良好缺点:策略数量增多 所有策略类都需要对外暴露。违背迪米特法则,只用用单个策略,为何要理解整个策略,这就失去了封装的意义,因此,可以通过其他模式完善,eg:工厂模式、代理模式或享元模...原创 2019-09-09 17:30:22 · 157 阅读 · 0 评论 -
【先导篇】6大设计原则-设计模式
单一职责原则,它规定一个类应该只有一个发生变化的原因。所谓职责是指类变化的原因。如果一个类有多于一个的动机被改变,那么这个类就具有多于一个的职责。而单一职责原则就是指一个类或者模块应该有且只有一个改变的原因。里氏替换原则是面向对象设计的基本原则之一。 里氏替换原则中说,任何基类可以出现的地方,子类一定可以出现。”也就是说,当一个子类的实例应该能够替换任何其超类的实例时,它们之间才具有is-A关...原创 2019-09-10 09:13:01 · 125 阅读 · 0 评论 -
适配器模式-23种设计模式
类型:【结构型】类图:描述: 适配器模式是将一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。特点:优点:适配器模式可以让两个没有任何关系的类一起工作,只要适配器搞定适配就行。 增加了类的透明性。我们访问的都是Target的,具体实现都委托给了源角色,这些对高层都是透明的。 提高了类的复用性。 ...原创 2019-09-10 16:59:10 · 123 阅读 · 0 评论 -
迭代器模式-23种设计模式
类型:【创建型】类图:描述: 提供一种方法访问一个容器对象中各个元素,而又不暴露该对象的内部细节,理解即可,多数语言已提供内置解决方案。...原创 2019-09-11 11:39:58 · 161 阅读 · 0 评论 -
组合模式-23种设计模式
类型:【结构型】类图:描述: 组合模式是将对象组合成树形结构以表示”部分-整体“的层次结构,使得用户对单个对象和整体对象具有一致性。特点:优点:高层模块调用简单。树的节点都是component,局部和整体对调用者来说一致,高层模块不必关心处理的是局部还是整体,简化代码。 节点自由增加。易于拓展,追加节点非常便捷,符合开闭原则,易于维护。缺点:场景会...原创 2019-09-11 17:44:59 · 96 阅读 · 0 评论 -
单例模式-23种设计模式
类型:【创建型】类图:描述: 确保某一个类只有一个实例,并且自行实例化并向整个系统提供这个实例。特点:优点:由于单例模式在内存中只有一个实例,减少了内存开支,特别是一个对象需要频繁地创建、销毁时,而且创建和销毁的性能又无法优化,单例模式的优势就非常明显。 由于单例模式只生成一个实例,所以减小了系统的性能开销,当一个对象的产生需要比较多的资源时,则可以通过...原创 2019-09-12 11:13:38 · 65 阅读 · 0 评论 -
工厂模式-23种设计模式
类型:【创建型】类图:描述:工厂模式是一个用于创建对象的接口,让子类选择实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。特点:良好的封装性,代码结构清晰 工厂方法模式的拓展性非常优秀 屏蔽产品类,便捷、安全 典型的解耦框架。符合迪米特、依赖倒置、里氏替换原则使用场景:可代替new对象,生成对象的地方都可以用,注意复杂度 需要灵活、拓展框架时,可考虑之。万...原创 2019-09-12 12:14:29 · 84 阅读 · 0 评论 -
抽象工厂模式-23种设计模式
类型:【创建型】类图:描述: 为创建一组相关或互相依赖的依赖的对象提供一个接口,而且无需指定它们的具体类。特点:优点:封装性,只关心工厂能生产什么,无需关注产品具体细节 产品族内的约束为非公开状态。如一些生产比例的约束,在工厂内实现缺点:产品族拓展非常困难。改变抽象类,实现都要改,违反开闭原则使用场景: 一个对象族都有相同的约束,...原创 2019-09-12 15:59:49 · 77 阅读 · 0 评论 -
模板模式-23种设计模式
类型:【行为型】类图:描述: 定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。特点:优点:封装不变不封,拓展可变部分 提取公共部分代码,便于维护 行为由父类控制,子类实现。基本方法由子类实现的,因此子类可以通过拓展的方式增加相应的功能,符合开闭原则缺点:常规设计习惯是抽象类负责...原创 2019-09-12 17:45:14 · 140 阅读 · 0 评论 -
装饰模式-23种设计模式
类型:【结构型】类图:描述: 装饰模式就是动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更为灵活。特点:优点:装饰类和被装饰类可以独立发展,而不会相互耦合。换句话说,Component类无需知道Decorator类,Decorator类是从外部来拓展Component类的功能,而Decorator也不用知道具体的构件。 装...原创 2019-09-09 15:49:53 · 150 阅读 · 1 评论