
设计模式
文章平均质量分 53
梵法利亚
这个作者很懒,什么都没留下…
展开
-
java实现线程安全的单例模型
单例模式:确保某要给类只有一个实例,并提供一个全局访问带你来访问这个实例。单例模式分为饿汉模型和懒汉模式//饿汉模式:(线程安全)public class Singleton1 { // 静态私有成员变量 private static Singleton1 instance = new Singleton1(); // 私有构造函数 private Singleton1() { } // 静态公有工厂方法,返回唯一实例 public static.转载 2022-03-07 15:47:55 · 1882 阅读 · 0 评论 -
中介者(Mediator)模式
在现实生活中,常常会出现好多对象之间存在复杂的交互关系,这种交互关系常常是“网状结构”,它要求每个对象都必须知道它需要交互的对象。例如,每个人必须记住他(她)所有朋友的电话;而且,朋友中如果有人的电话修改了,他(她)必须告诉其他所有的朋友修改,这叫作“牵一发而动全身”,非常复杂。如果把这种“网状结构”改为“星形结构”的话,将大大降低它们之间的“耦合性”,这时只要找一个“中介者”就可以了。如前面所说的“每个人必须记住所有朋友电话”的问题,只要在网上建立一个每个朋友都可以访问的“通信录”就解决了。这样的例子还原创 2020-10-06 11:45:08 · 236 阅读 · 0 评论 -
观察者(Observer)模式
什么叫观察者(Observer)模式?观察者(Observer)模式的定义:指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。这种模式有时又称作发布-订阅模式、模型-视图模式,它是对象行为型模式。观察者模式是一种对象行为型模式,其主要优点如下。降低了目标与观察者之间的耦合关系,两者之间是抽象耦合关系。目标与观察者之间建立了一套触发机制。它的主要缺点如下。目标与观察者之间的依赖关系并没有完全解除,而且有可能出现循环引用。当观察者对象很多原创 2020-10-06 10:43:40 · 326 阅读 · 0 评论 -
职责链(Chain of Responsibility)模式
在现实生活中,常常会出现这样的事例:一个请求有多个对象可以处理,但每个对象的处理条件或权限不同。例如,公司员工请假,可批假的领导有部门负责人、副总经理、总经理等,但每个领导能批准的天数不同,员工必须根据自己要请假的天数去找不同的领导签名,也就是说员工必须记住每个领导的姓名、电话和地址等信息,这增加了难度。这样的例子还有很多,如找领导出差报销、生活中的“击鼓传花”游戏等。在计算机软硬件中也有相关例子,如总线网中数据报传送,每台计算机根据目标地址是否同自己的地址相同来决定是否接收;还有异常处理中,处理程序根据原创 2020-10-06 09:40:32 · 390 阅读 · 0 评论 -
命令(Command)模式
在软件开发系统中,常常出现“方法的请求者”与“方法的实现者”之间存在紧密的耦合关系。这不利于软件功能的扩展与维护。例如,想对行为进行“撤销、重做、记录”等处理都很不方便,因此“如何将方法的请求者与方法的实现者解耦?”变得很重要,命令模式能很好地解决这个问题。在现实生活中,这样的例子也很多,例如,电视机遥控器(命令发送者)通过按钮(具体命令)来遥控电视机(命令接收者),还有计算机键盘上的“功能键”等。什么是命令(Command)模式?命令(Command)模式的定义如下:将一个请求封装为一个对象,使发出原创 2020-10-05 22:54:58 · 582 阅读 · 0 评论 -
策略(Strategy)模式
当实现某一个功能存在多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能,如数据排序策略有冒泡排序、选择排序、插入排序、二叉树排序等。如果使用多重条件转移语句实现(即硬编码),不但使条件语句变得很复杂,而且增加、删除或更换算法要修改原代码,不易维护,违背开闭原则。如果采用策略模式就能很好解决该问题。什么是策略(Strategy)模式?策略(Strategy)模式的定义:该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策原创 2020-10-05 21:46:51 · 464 阅读 · 0 评论 -
享元(Flyweight)模式
什么是享元(Flyweight)模式?享元(Flyweight)模式的定义:运用共享技术来有效地支持大量细粒度对象的复用。它通过共享已经存在的对象来大幅度减少需要创建的对象数量、避免大量相似类的开销,从而提高系统资源的利用率。享元模式的主要优点是:相同对象只要保存一份,这降低了系统中对象的数量,从而降低了系统中细粒度对象给内存带来的压力。其主要缺点是:为了使对象可以共享,需要将一些不能共享的状态外部化,这将增加程序的复杂性。读取享元模式的外部状态会使得运行时间稍微变长。例子在这个例子中{@li原创 2020-10-05 20:21:13 · 276 阅读 · 0 评论 -
外观(Facade)模式
什么是外观(Facade)模式?当一个系统的功能越来越强,子系统会越来越多,客户对系统的访问也变得越来越复杂。这时如果系统内部发生改变,客户端也要跟着改变,这违背了“开闭原则”,也违背了“迪米特法则”,所以有必要为多个子系统提供一个统一的接口,从而降低系统的耦合度,这就是外观模式的目标。外观(Facade)模式的定义:是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。该模式对外有一个统一接口,外部应用程序不用关心内部子系统的具体的细节,这样会大大降低应用程序的复杂度,提原创 2020-10-05 19:30:00 · 161 阅读 · 1 评论 -
装饰(Decorator)模式
什么是装饰(Decorator)模式?指在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式,它属于对象结构型模式。装饰(Decorator)模式的主要优点有:采用装饰模式扩展对象的功能比采用继承方式更加灵活。可以设计出多个不同的具体装饰类,创造出多个不同行为的组合。其主要缺点是:装饰模式增加了许多子类,如果过度使用会使程序变得很复杂。例子在这个例子中,我们展示了simple{@linksimpletroll(简单巨魔)}如何首先攻击然后逃离战场。然后我们用{@l原创 2020-10-04 20:27:36 · 140 阅读 · 0 评论 -
桥接(Bridge)模式
什么是桥接bridge模式将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度。桥接(Bridge)模式的优点是:由于抽象与实现分离,所以扩展能力强;其实现细节对客户透明。缺点是:由于聚合关系建立在抽象层,要求开发者针对抽象化进行设计与编程,这增加了系统的理解与设计难度。例子在桥模式中,抽象({@link Weapon(武器)})和实现({@link enchancement(魔法)})有自己的类层次结构。可以在不影响客户端的情况下原创 2020-10-04 15:39:24 · 581 阅读 · 0 评论