自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(55)
  • 收藏
  • 关注

原创 设计模式-解释器模式

比如,你可以编写一个正则表达式,用来查找所有以0开头,后面跟着2~3个数字,然后是一个连字号“-”,最后是7或8位数字的电话号码,比如010-12345678或020-7654321。因此,解释器模式的适用面比较窄。解释器是一种特殊的设计模式,它建立一个解释器,对于特定的计算机程序设计语言而言,用来解释预先定义的文法。以上程序只是演示了解释器模式进行文法解释的思路,在实际的开发中,则可以灵活运用,丰富它们的功能。它等效于上面的3个语句,尽管对于重复的匹配而言它效率不高,因为它不允许重用已编译的模式。

2024-07-10 11:09:30 1338

原创 设计模式-中介者模式

但是生产者被唤醒后不能马上进行生产,因为它在 wait()的时候已经丧失了对仓库的控制权,所以就需要等待消费者线程结束操作,才能重新取得仓库的控制权,再进行生产。各个对象之间的交互操作非常多,每个对象的行为操作都依赖彼此对方,修改一个对象的行为,同时会涉及到修改很多其他对象的行为,如果使用 Mediator 模式,可以使各个对象间的耦合松散,只需关心和 Mediator的关系,使多对多的关系变成了一对多的关系,可以降低系统的复杂性,提高可修改扩展性。在使用中介者模式的时候注意控制中介者角色的大小。

2024-07-09 11:20:50 1030

原创 设计模式-访问者模式

数据结构的每一个节点都可以接受一个访问者的调用,此节点向访问者对象传入节点对象,而访问者对象则反过来执行节点对象的操作,这样的过程叫做双重分派。节点调用访问者,将它自己传入,访问者则将某算法针对此节点执行。因此,要实现 Visitors 对 Subiect 的访问,首先应该允许 Subject接受 Visitor 的访问,然后即可实现对自身的访问。访问者模式是一种分离对象数据结构与行为的方法,通过这种分离,可以为一个已存在的类或类群(即被访问者)增加新的操作(即访问者)而无须为它们进行任何修改。

2024-07-09 11:02:55 1486

原创 设计模式-状态模式

比如使用 MSN、QQ等可以切换不同的状态,例如在线、隐身、忙碌、离开、空闲等,在不同的状态下你可以做不同的事情,例如在线时可以收发文件,而隐身时就不能收发文件等,当你每次设定确认你的状态后,你的状态信息就会显示给你的好友。这就不难理解什么状态模式了。状态模式在工作流或游戏等各种系统中大量使用,甚至是这些系统的核心功能设计,例如政府OA 中,一个批文的状态有多种:未办、正在办理、正在批示、正在审核、已经完成等各种状态,使用状态机可以封装这个状态的变化规则,从而达到扩充状态时,不必涉及到状态的使用者。

2024-07-08 10:53:38 1071

原创 设计模式-备忘录模式

当一个客户首次访问服务器上的一个JSP页面时,JSP引擎产生一个 Session 对象,同时分配一个 String 类型的ID号,JSP 引擎同时将这换个ID号发送到客户端,存放在Cookie 中,直到客户关闭浏览器后,服务器端才将该客户的 Session 对象取消,并且与客户的会话对应关系消失。备忘录模式是用一个备忘录对象来存储另外一个对象的内部状态,将该对象的状态捕捉住,并外部化存储起来,从而可以在将来合适的时候把这个对象还原到存储起来的状态。Session 对象通过下面的方法来实现对象的缓存。

2024-07-08 10:21:07 1001

原创 设计模式-命令模式

命令模式的根本目的在于将“行为请求者”与“行为实现者”解耦,在面向对象语言中,常见的实现手段是“将行为抽象为对象”。这也是命令模式典型的应用场景。(4) 命令实现类 MyCommand.java是具体的命令实现,它供发起者 Invoker.java 调用,以向接收者 Receiver.java 发起调用请求,因此它拥有一个 Receiver.java对象,并在命令执行函数中调用接收者。命令模式是一种对象行为型模式,它主要解决的问题:在软件构建过程中,行为发起者与行为实现者之间的紧耦合的问题。

2024-07-04 11:11:56 1034 1

原创 设计模式-责任链模式

在该函数中为了实现对下家的引用,必须继承自 AbstractHandler,以实现对下家的引用,并提供getter/setter函数实现对该引用的取得和修改操作,这就是责任链的核心。由流管道的责任链模式也可以得出,凡是具有过滤和管道特征的应用都属于责任链器模式,例如 Java EE 中的 Filter 过滤器、UNIX中的管道符等,都属于责任链模式。因此,Java I/O 库中的所有输入流、输出流的类都采用了责任链模式,它们可以无限次地进行装饰转换,转换的目标就是得到自己想要的数据类型的流对象。

2024-07-04 10:42:00 1109

原创 设计模式-迭代子模式

Vector 里有很多对象,如果你要查看其中的所有对象,一个办法是用 Vector 的 get(int index)方法,不过这样效率比较低,另外一个方法是用 Vector 的 elements(方法返回一个 Enumeration 对象,用 Enumeration 的 hasMoreElements()方法向下移动并判断当前位置是否有对象,有则用nextElement()方法返回这个对象。Enumeration接口定义了可以对一个对象的类集中的元素进行枚举(一次获得一个)的方法。其源代码如下程序所示。

2024-07-03 12:25:41 1144

原创 设计模式-观察者模式

GOF 给观察者模式如下定义:定义对象间的一种一对多的依赖关系,让多个观察者对象同时关注同一个对象,当该对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。Observable.java 是一个观察者目标类,它也类似于上面提到的抽象观察者类,它提供了一个Vector 列表用来保存观察者对象,并提供了增加、删除、通知观察者的具体实现。(6) 被观察者实现类 MySubject.java是一个具体的目标类,它仅仅实现自身的操作函数,并适时调用 notifyObservers()来通知所有的观察者。

2024-07-03 11:07:26 1163

原创 设计模式-模板方法模式

因为 HtpServlet.service()方法会检查请求方法是否调用了适当的处理方法,不必要覆盖 service()方法,只需覆盖相应的 do 方法就可以了。模板方法模式的使用方法:定义一个abstract的Class,在这个抽象类中,至少包括一个实现模板方法的不可被子类改写的public方法(需声明为final),在这个公共方法中,实现模板方法的业务处理逻辑,同时,在这个方法中,还包括一些对本类中的抽象方法的调用:再根据业务的需要,定义各种不同的子类,并实现模板方法类的所有抽象方法。

2024-07-02 11:50:30 1194 2

原创 设计模式-策略模式

策略模式的使用是由用户发起的,根据用户的操作决定使用什么具体的策略角色。(3) 加法策略类 Plus.java用来进行加法运算,它继承了策略抽象类AtstractCalculator.java,从而能够调用 split()函数取得加法的两个数值,并实现了策略接口ICaculator.java,在 calculate()中计算两个数字的和。它们使用了策略模式,其中的 LayoutManager 是顶层的策略接口,LayoutManager2 是扩展的策略接口,具体的实现类都是策略类,如下图所示。

2024-07-02 11:01:31 1305

原创 设计模式-享元模式

当一个客户端对象请求一个享元对象的时候,享元工厂需要检查系统中是否已经有一个符合要求的享元对象,如果已经有了,享元工厂就应当提供这个已有的享元对象;如果系统中没有一个适当的享元对象的话,享元工厂就应当创建一个新的合适的享元对象。如果从类中移出某些数据并存储到外部,且这样能大幅度地减少程序需要保存的不同类实例的数量,就适合使用享元模式,以避免大量非常相似的类的开销。通过以上连接池的管理,实现了数据库连接的共享,不需要每一次取得连接时都重新创建,因为节省了重复创建数据库连接的开销,使得程序的性能大幅提升。

2024-07-01 11:01:14 934

原创 设计模式-组合模式

AWT类全部在java.awt包中,Java图形用户界面的最基本组成部分是组件(Component),组件是一个可以以图形化的方式显示在屏幕上并能与用户进行交互的对象,例如一个按钮、一个标签等。类java.awt.Component 是许多组件类的父类,Component 类中封装了组件通用的方法和属性,如图形的组件对象、大小、显示位置、前景色和背景色、边界、可见性等。其源代码如下程序所示。因此,这里的容器类就是组件类的组合,所有的子容器类型都可以拥有多个Component的子类型对象,如下图所示。

2024-07-01 10:39:52 1183

原创 设计模式-桥接模式

这句话有3个关键词,也就是。

2024-06-15 11:00:42 1364

原创 设计模式-外观模式

根据外观模式的应用场景可知,在Java中,凡是为一个子系统提供统一的外部接口,而不需要了解子系统内部的类都属于外观模式的应用。外观模式可以将一些列复杂的类包装成一个简单的封闭接口。(4) 外观模式类Computerjava的源代码如下程序所示,其中包含了CPU、内存和硬盘 3个类对象,并定义了启动和关闭计算机的函数,在启动和关闭时批量地启动和关闭CPU、内存和硬盘。从程序的输出可以看出,通过 Computer 一个外观类即可实现计算机所有部件的控制,而不需要单独去控制其所有的部件,这正是外观模式的作用。

2024-06-15 10:35:17 1212

原创 设计模式-代理模式

在对已有的方法进行使用的时候需要对原有方法进行改进或者修改,这时候有两种改进选择:修改原有方法来适应现在的使用方式,或者使用一个“第三者”方法来调用原有的方法,并且对方法产生的结果进行一定的控制。上面的代码表面上看很复杂,但它的作用其实很简单,就是告诉 DynamicProxy 类用一个指定的类加载器来动态创建一个对象,该对象要实现指定的接口(本例为Soucable),并用提供的InvocationHandler来代替传统的方法主体。代理模式中的代理者就好比中介机构,它提供了对被代理对象的一切事物。

2024-06-14 11:19:23 1392

原创 设计模式-装饰器模式

然后它实现了Sourcable.java接口,以期保持与source 同样的接口,并在重写的 operation()函数中调用 source的 operation()函数,在调用前后可以实现自己的输出,这就是装饰器所扩展的功能。为了演示多次装饰的效果,我们这里分别创建了3个装饰器,第一个装饰器Decorator1 装饰Source 对象,第二个装饰器 Decorator2 装饰被第一个装饰器装饰后的对象,第三个装饰器 Decorator2装饰被第二个装饰器装饰后的对象。它与对象的适配器模式的异同点如下。

2024-06-14 10:54:35 1260

原创 设计模式-适配器模式

Adaptee 类只有 operation()方法,没有 newoperation()方法,但是客户端又需要目标类同时拥有这两个方法,这时便可以新建一个接口 Target,并提供一个中间环节 Adapter类,Adapter 类实现了 Targe接口,并继承自 Adaptee,Adapter 类的 operation()方法重新封装了 Adapter 类的 operation()方法,并同时实现了 newoperation()方法,这便实现了适配的目的。但是根据需求的不同,可以分别选用3种不同的子模式。

2024-06-13 10:37:32 1374

原创 设计模式-原型模式

因此,使用Obiect.clone()方法只能浅层次的克隆,即只能对那些成员变量是基本类型或String类型的对象进行克隆,对那些成员变量是类类型的对象进行克隆要使用到对象的序列化,不然克降出来的 Prototype 对象都共享同一个 obj 实例。用面向对象的方法来说就是,我们先建立一个原型,然后通过对原型进行复制和修饰的方法,就可以产生一个与原型相似的新对象。从以上的使用可以看出,在Java中Prototype 模式变成 clone()方法的使用,此方法执行的是该对象的“浅复制”,而不“深复制”操作。

2024-06-13 09:51:08 1226

原创 设计模式-建造者模式

与 StringBuilder 建造者类一样,ProcessBuilder也是建造者类,它管理的数据对象是一系列的命令,这些进程的命令存储在command列表对象中,对该列表对象的创建和管理就构成了对该复合对象进行管理的功能。工厂类提供了生产单个产品的功能,而建造者模式则可以将各种产品集中起来进行统一管理,建造者模式也是工厂模式的扩展,区别是它将各种产品集中了起来。但如果我们还应该关注该汽车的各部分是怎么造出来的(或者说,不同的工厂对产品的各部分的造法不一样),我们就应该使用 Builder 模式。

2024-06-12 11:17:25 1789

原创 设计模式-单例模式

为了在系统中使用该属性文件中定义的用户名和密码,可以根据以上的单例模式模板文件SingletonFactory.java创建一个工厂类,其中定义一个私有变量 properties,用来在系统启动时将文件读取数据存储在该变量中,并提供一个按照用户名查找密码的函数getConfigO。单例模式是一种特殊的工厂方法模式,它适合于一个类只有一个实例的情况,比如窗口管理器打印缓冲池和文件系统。典型的情况是,那些对象的实例能够被整个软件系统的不同对象访问,因此需要一个全局的访问指针,这便是众所周知的单例模式的应用。

2024-06-12 10:25:57 1047

原创 设计模式-抽象工厂模式

当然这并不表示普通的工厂方法没有适用的场合,如果产品结构比较固定也比较简单,则可以使用,就好比方法工厂章节中Swing的工厂BorderFactory 所示。前面文章中的3种工厂方法模式中,核心都是工厂类,一个工厂类承担了所有产品的创建工作,如果产品的树形结构需要扩展,就必须在工厂类中为新增的产品增加创建功能,这显然违背了开闭原则–在扩展时不能够修改原有的代码。为了解决这个问题,我们可以采用抽象工厂模式,即建立与产品类等级相似的工厂等级结构,为每一个产品都提供一个具体的工厂类,如下图所示。

2024-06-11 15:31:02 665

原创 设计模式-工厂方法模式

工厂方法模式的作用是负责实例化同一个接口的多个类。工厂方法模式的意义是定义一个创建产品对象的工厂类,由该工厂统一创建继承了同一个接口的多个产品对象。根据工厂类和工厂方法的不同形式,可以用来表示不同的创建策略。根据决策策略的不同,工厂方法模式可以分为3个子类型。工厂方法模式(FactoryMethod):最基本的工厂模式多个工厂方法模式:对工厂方法模式的扩展。

2024-06-11 14:54:24 861

原创 设计模式-六大原则

设计模式体现的是软件设计的思想,而不是软件技术,它重在使用接口与抽象类来解决各种问题。在使用这些设计模式时,应该首先遵守六大原则。原则含义具体方法开闭原则对扩展开放,对修改关闭多使用抽象类和接口里氏代换原则基类可以被子类替换使用抽象类继承,不使用具体类继承合成复用原则要依赖于抽象,不要依赖于具体针对接口编程,不针对实现编程接口隔离原则使用多个隔离的接口,比使用单个接口好建立最小的接口迪米特法则一个软件实体应当尽可能少地与其他实体发生相互作用通过中间类建立联系依赖倒转原则。

2024-06-08 10:58:54 964

原创 设计模式-设计模式分类

23 种设计模式,分为创建型模式、结构型模式和行为型模式。另外,近来这一清单又增加了一些类别,例如,并发型模式、线程池模式、Java EE 企业技术的多层应用程序上的模式等。

2024-06-08 10:35:30 807

原创 UML实战-BUG管理系统

根据 UML建模的过程来进行一个完整系统的设计–Bug 管理系统。下面是一个标注 UML 设计过程的参考。需求分析:用例图。系统分析:分析业务规则–状态图。系统分析:分析业务流程–活动图。系统设计:设计静态结构–类图和包图。系统设计:Action类被调用关系–序列图。系统设计:用户调用 Action类的过程–协作图。系统架构:组件图和部署图。编码实现。

2024-06-07 13:55:54 1459

原创 UML交互图-协作图

协作图和序列图都表示出了对象间的交互作用,但是它们侧重点不同。序列图清楚地表示了交互作用中的时间顺序,但没有明确表示对象间的关系。协作图则清楚地表示了对象间的关系,但时间顺序必须从顺序号获得。序列图常常用于表示方案,而协作图用于过程的详细设计。

2024-06-07 10:15:52 637

原创 UML交互图-序列图

序列图又称为时序图、活动序列图,它是一种详细表示对象之间及对象与参与者实例之间交互的图,它由一组协作的对象(或参与者实例)及它们之间可发送的消息组成,它强调消息之间的时间顺序。序列图主要用于按照交互发生的一系列顺序,显示对象之间的这些交互。序列图的主要用途之一是把用例表达的需求,转化为进一步、更加正式层次的精细表达。用例常常被细化为一个或者更多的序列图。

2024-06-06 16:33:19 1192

原创 UML行为图-活动图

活动图是 UML用于对系统的动态行为建模的另一种常用工具,它描述活动的顺序,展现从一个活动到另一个活动的控制流。活动图在本质上是一种流程图。

2024-06-06 16:21:13 814

原创 UML行为图-状态图

创建 UML 状态图的目的是研究类、角色、子系统或组件的实时行为。状态图不仅可用于描述用户接口、设备控制器和其他具有反馈的子系统,还可用于描述在生命期中跨越多个不同性质阶段的被动对象的行为,在每一阶段该对象都有自己特殊的行为。

2024-06-04 14:29:35 1116

原创 UML实现图-部署图

部署图(Deployent Diagram)描述了运行软件的系统中硬件和软件的物理结构。部署图中通常包含两种元素:节点和关联关系,部署图中每个配置必须存在于某些节点上。部署图也可以包含包或子系统。节点是在运行时代表计算机资源的物理元素。节点名称有两种:简单名和路径名。路径名是在简单名的前面加上节点所在包的名称。节点也可以用标记值或表示节点细节的附加栏加以修饰。节点可以分为两种:处理器(Processor)和设备(Device)。

2024-06-04 14:05:08 727

原创 UML实现图-组件图

组件图(ComponentDiagram)描述了软件的各种组件和它们之间的依赖关系。组件图中通常包含4种元素:组件、程序、包、任务,各个组件之间还可以相互依赖。

2024-06-03 15:05:18 511

原创 UML静态图-包图

静态图包含类图、对象图和包图的主要目的是在系统详细设计阶段,帮助系统设计人员以一种可视化的方式来理解系统的内部结构和代码结构,包括类的细节、类的属性和操作、类的依赖关系和调用关系、类的包和包的依赖关系。

2024-06-03 14:53:08 544

原创 UML静态图-对象图

静态图包含类图、对象图和包图的主要目的是在系统详细设计阶段,帮助系统设计人员以一种可视化的方式来理解系统的内部结构和代码结构,包括类的细节、类的属性和操作、类的依赖关系和调用关系、类的包和包的依赖关系。对象图与类图之间的关系,就好比对象与类之间的关系,对象是赋予了某种特殊值时的类的实例。对象图拥有与类图不一样的表示法和应用场景。

2024-05-31 16:43:58 554

原创 UML静态图-类图

静态图包含类图、对象图和包图的主要目的是在系统详细设计阶段,帮助系统设计人员以一种可视化的方式来理解系统的内部结构和代码结构,包括类的细节、类的属性和操作、类的依赖关系和调用关系、类的包和包的依赖关系。

2024-05-31 16:37:05 1185

原创 UML用例图

用例模型主要应用在工程开发的初期进行系统需求分析阶段,用于描述系统的功能,也就是从外部用户的角度观察系统应支持哪些功能,帮助分析人员理解系统的行为,它是对系统功能的宏观描述。

2024-05-30 11:38:25 1136

原创 UML基本构成元素

UML由图和元模型组成,主要包括3个基本构造块:事物(Things)、关系(Relationships)和图(Diagrams)1、四种事物事物是实体抽象化的最终结果,是模型中的基本成员,UML中包含结构事物、行为事物、分组事物和注释事物。结构事物(Structural Things)结构事物是模型中的静态部分,用以呈现概念或实体的表现元素,是软件建模中最常见的元素共有以下7种。类(Class):是指具有相同属性、方法、关系和语义的对象的集合。一个典型的类图如图1-1 所示。接口(Interface)

2024-05-30 10:33:01 1267

原创 Java线程中断和停止

在Java编程中,线程的中断和停止是一个常见且重要的问题。当我们需要立即中断或停止一个线程时,必须采取一些方法来确保线程可以被安全地终止。本文将介绍几种解决Java中线程中断和停止问题的方法,并给出代码示例。在Java编程中,线程中断和停止是一个需要特别注意的问题。我们可以使用interrupt()方法和volatile关键字来控制线程的中断和停止。在使用interrupt()方法时,需要在线程的逻辑中检查中断标志,并根据中断标志来决定线程的继续执行或停止。

2024-05-29 10:48:22 539

原创 Java持续集成和自动化测试

在现代软件开发中,持续集成和自动化测试是非常重要的环节。通过持续集成,开发者可以频繁地将代码合并到共享存储库中,并通过自动化测试来验证代码的正确性,从而提高代码质量和开发效率。本文将介绍Java开发过程中如何实现持续集成和自动化测试,并提供具体的代码示例。

2024-05-29 10:45:27 634

原创 Spring框架的价值和对前端的影响

通过对Spring框架的解析,我们可以看到它为前端开发带来了很多价值。通过Spring框架的支持,前端开发者可以更好地组织和管理应用程序的结构,将业务逻辑和页面展示解耦;同时,Spring框架还提供了AOP的支持,将通用的横切关注点与业务逻辑解耦,提高了代码的可维护性和可读性;这样,在前端开发的过程中,我们可以聚焦于业务逻辑的实现,而不需要关注其他横切关注点的处理。总之,Spring框架为前端开发提供了很多价值,它是一个强大而灵活的工具,可以帮助前端开发者构建高效、稳定的Web应用程序。

2024-05-28 09:08:30 677

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除