
设计模式
文章平均质量分 79
设计模式
勿问东西
日拱一卒,功不唐捐
展开
-
【设计模式】MVC模式&前端控制器模式
MVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式。这种模式用于应用程序的分层开发。使用 StudentController 方法来演示 MVC 设计模式的用法。原创 2024-10-04 18:24:11 · 1024 阅读 · 0 评论 -
【设计模式】外观模式
这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。假设一台电脑,它包含了 CPU(处理器),Memory(内存) ,Disk(硬盘)这几个部件,若想要启动电脑,则先后必须启动 CPU、Memory、Disk。应用实例: 1、去医院看病,可能要去挂号、门诊、划价、取药,让患者或患者家属觉得很复杂,如果有提供接待人员,只让接待人员来处理,就很方便。意图:为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。2、定义系统的入口。原创 2024-10-04 18:21:23 · 434 阅读 · 0 评论 -
【设计模式】原型模式
关键代码: 1、实现克隆操作,在 JAVA 继承 Cloneable,重写 clone(),在 .NET 中可以使用 Object 类的 MemberwiseClone() 方法来实现对象的浅拷贝或通过序列化的方式来实现深拷贝。缺点: 1、配备克隆方法需要对类的功能进行通盘考虑,这对于全新的类不是很难,但对于已有的类不一定很容易,特别当一个类引用不支持串行化的间接对象,或者引用含有循环结构的时候。注意事项:与通过对一个类进行实例化来构造新对象不同的是,原型模式是通过拷贝一个现有对象生成新对象的。原创 2024-10-04 18:20:27 · 707 阅读 · 0 评论 -
【设计模式】责任链模式
3、JAVA WEB 中 Apache Tomcat 对 Encoding 的处理,Struts2 的拦截器,jsp servlet 的 Filter。主要解决:职责链上的处理者负责处理请求,客户只需要将请求发送到职责链上即可,无须关心请求的处理细节和请求的传递,所以职责链将请求的发送者和请求的处理者解耦了。意图:避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。每个记录器中的下一个记录器代表的是链的一部分。原创 2024-10-04 18:18:19 · 800 阅读 · 0 评论 -
【设计模式】解释器模式
这种模式实现了一个表达式接口,该接口解释一个特定的上下文。何时使用:如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子。使用场景: 1、可以将一个需要解释执行的语言中的句子表示为一个抽象语法树。InterpreterPatternDemo,我们的演示类使用 Expression 类创建规则和演示表达式的解析。意图:给定一个语言,定义它的文法表示,并定义一个解释器,这个解释器使用该标识来解释语言中的句子。2、增加了新的解释表达式的方式。3、易于实现简单文法。原创 2024-10-04 18:16:01 · 261 阅读 · 0 评论 -
【设计模式】迭代器模式
我们将创建一个叙述导航方法的 Iterator 接口和一个返回迭代器的 Container 接口。注意事项:迭代器模式就是分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴露集合的内部结构,又可让外部代码透明地访问集合内部的数据。使用场景: 1、访问一个聚合对象的内容而无须暴露它的内部表示。3、为遍历不同的聚合结构提供一个统一的接口。缺点:由于迭代器模式将存储数据和遍历数据的职责分离,增加新的聚合类需要对应增加新的迭代器类,类的个数成对增加,这在一定程度上增加了系统的复杂性。原创 2024-10-04 18:14:30 · 398 阅读 · 0 评论 -
【设计模式】策略模式
使用场景: 1、如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为。3、如果一个对象有很多的行为,如果不用恰当的模式,这些行为就只好使用多重的条件选择语句来实现。2、旅行的出游方式,选择骑自行车、坐汽车,每一种旅行方式都是一个策略。在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。注意事项:如果一个系统的策略多于四个,就需要考虑使用混合模式,解决策略类膨胀的问题。缺点: 1、策略类会增多。原创 2024-10-04 18:12:32 · 253 阅读 · 0 评论 -
【设计模式】模板模式
应用实例: 1、在造房子的时候,地基、走线、水管都一样,只有在建筑的后期才有加壁橱加栅栏等差异。3、spring 中对 Hibernate 的支持,将一些已经定好的方法封装起来,比如开启事务、获取 Session、关闭 Session 等,程序员不重复写那些已经规范好的代码,直接丢一个实体就可以保存。我们将创建一个定义操作的 Game 抽象类,其中,模板方法设置为 final,这样它就不会被重写。缺点:每一个不同的实现都需要一个子类来实现,导致类的个数增加,使得系统更加庞大。何时使用:有一些通用的方法。原创 2024-10-04 18:11:05 · 401 阅读 · 0 评论 -
【设计模式】装饰器模式
然后我们创建一个实现了 Shape 接口的抽象装饰类 ShapeDecorator,并把 Shape 对象作为它的实例变量。主要解决:一般的,我们为了扩展一个类经常使用继承方式实现,由于继承为类引入静态特征,并且随着扩展功能的增多,子类会很膨胀。优点:装饰类和被装饰类可以独立发展,不会相互耦合,装饰模式是继承的一个替代模式,装饰模式可以动态扩展一个实现类的功能。这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。创建实现了 Shape 接口的抽象装饰类。原创 2024-10-04 18:09:19 · 828 阅读 · 0 评论 -
【设计模式】观察者模式
缺点: 1、如果一个被观察者对象有很多的直接和间接的观察者的话,将所有的观察者都通知到会花费很多时间。3、观察者模式没有相应的机制让观察者知道所观察的目标对象是怎么发生变化的,而仅仅只是知道观察目标发生了变化。比如,当一个对象被修改时,则会自动通知依赖它的对象。意图:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。何时使用:一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知,进行广播通知。Observer 的实体类。原创 2024-10-04 18:06:17 · 562 阅读 · 0 评论 -
【设计模式】工厂模式&抽象工厂模式
3、设计一个连接服务器的框架,需要三个协议,“POP3”、“IMAP”、“HTTP”,可以把这三个作为产品类,共同实现一个接口。有一点需要注意的地方就是复杂对象适合使用工厂模式,而简单对象,特别是只需要通过 new 就可以完成创建的对象,无需使用工厂模式。缺点:每次增加一个产品时,都需要增加一个具体类和对象实现工厂,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具 体类的依赖。在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。原创 2024-10-04 18:04:23 · 1126 阅读 · 0 评论 -
【设计模式】代理模式
5、Cache代理。主要解决:在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要安全控制,或者需要进程外的访问),直接访问会给使用者或者系统结构带来很多麻烦,我们可以在访问此对象时加上一个对此对象的访问层。注意事项: 1、和适配器模式的区别:适配器模式主要改变所考虑对象的接口,而代理模式不能改变所代理类的接口。缺点: 1、由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢。原创 2024-10-04 17:59:40 · 503 阅读 · 0 评论 -
【设计模式】适配器模式
2、JAVA JDK 1.1 提供了 Enumeration 接口,而在 1.2 中提供了 Iterator 接口,想要使用 1.2 的 JDK,则要将以前系统的 Enumeration 接口转化为 Iterator 接口,这时就需要适配器模式。2、想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作,这些源类不一定有一致的接口。(比如老虎和飞禽,现在多了一个飞虎,在不增加实体的需求下,增加一个适配器,在里面包容一个虎对象,实现飞的接口。原创 2024-10-04 17:56:47 · 600 阅读 · 0 评论 -
六种单例模式
六种单例模式原创 2022-06-26 11:56:08 · 223 阅读 · 0 评论 -
使用组合/聚合的方式来代替继承
在设计模式原则中有“组合/聚合复用原则”,结合网上的相关资料和文章,得出自己个人的理解并在此记录下。首先,我们要明确为什么要使用组合/聚合的方式来代替继承?1、降低耦合度,子类通过继承父类,可以达到代码重用的目的。但同时也意味着子类必须全盘继承父类的属性和方法,不需要的属性和方法继承会造成污染,当父类的方法变更时也会影响到子类。因此,出于降低代码耦合的角度考虑,应该避免直接继承有具体方法实现的父类。2、提高灵活性,由于java单继承的特点,无法同时使用多个类的特征,通过在类中创建不同工具类的方式,可以原创 2022-05-15 11:57:41 · 1814 阅读 · 1 评论