设计模式
文章平均质量分 61
初级程序员学习设计模式
皇家小黄
这个作者很懒,什么都没留下…
展开
-
行为型模式-访问者模式
根据模式,元素对象已接受访问者对象,这样访问者对象就可以处理元素对象上的操作。2、需要对一个对象结构中的对象进行很多不同的并且不相关的操作,而需要避免让这些操作"污染"这些对象的类,也不希望在增加新操作时修改这些类。需要对一个对象结构中的对象进行很多不同的并且不相关的操作,而需要避免让这些操作"污染"这些对象的类,使用访问者模式将这些封装到类中。您在朋友家做客,您是访问者,朋友接受您的访问,您通过朋友的描述,然后对朋友的描述做出一个判断,这就是访问者模式。在被访问的类里面加一个对外提供接待访问者的接口。原创 2023-10-31 21:16:27 · 344 阅读 · 0 评论 -
行为型模式-模板模式
1、在造房子的时候,地基、走线、水管都一样,只有在建筑的后期才有加壁橱加栅栏等差异。3、spring 中对 Hibernate 的支持,将一些已经定好的方法封装起来,比如开启事务、获取 Session、关闭 Session 等,程序员不重复写那些已经规范好的代码,直接丢一个实体就可以保存。在模板模式中,一个抽象类公开定义了执行它的方法的方式/模板。1、有多个子类共有的方法,且逻辑相同。2、重要的、复杂的方法,可以考虑作为模板方法。每一个不同的实现都需要一个子类来实现,导致类的个数增加,使得系统更加庞大。原创 2023-10-29 22:53:52 · 409 阅读 · 0 评论 -
行为型模式-策略模式
1、如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为。3、如果一个对象有很多的行为,如果不用恰当的模式,这些行为就只好使用多重的条件选择语句来实现。在策略模式定义了一系列算法或策略,并将每个算法封装在独立的类中,使得它们可以互相替换。在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。如果一个系统的策略多于四个,就需要考虑使用混合模式,解决策略类膨胀的问题。2、所有策略类都需要对外暴露。原创 2023-10-26 23:50:37 · 334 阅读 · 0 评论 -
行为型模式-空对象模式
在空对象模式(Null Object Pattern)中,一个空对象取代 NULL 对象实例的检查。Null 对象不是检查空值,而是反应一个不做任何动作的关系。这样的 Null 对象也可以在数据不可用的时候提供默认的行为。在空对象模式中,我们创建一个指定各种要执行的操作的抽象类和扩展该类的实体类,还创建一个未对该类做任何实现的空对象类,该空对象类将无缝地使用在需要检查空值的地方。原创 2023-10-25 22:53:53 · 236 阅读 · 0 评论 -
行为型模式-状态模式
3、将所有与某个状态有关的行为放到一个类中,并且可以方便地增加新的状态,只需要改变对象状态即可改变对象的行为。3、状态模式对"开闭原则"的支持并不太好,对于可以切换状态的状态模式,增加新的状态类需要修改那些负责状态转换的源代码,否则无法切换到新增状态,而且修改某个状态类的行为也需修改对应类的源代码。在状态模式中,我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象。对象的行为依赖于它的状态(属性),并且可以根据它的状态改变而改变它的相关行为。1、行为随状态改变而改变的场景。原创 2023-10-24 22:43:20 · 687 阅读 · 0 评论 -
行为型模式-观察者模式
1、如果一个被观察者对象有很多的直接和间接的观察者的话,将所有的观察者都通知到会花费很多时间。当主题的状态发生改变时,所有依赖于它的观察者都会收到通知并进行相应的更新。观察者模式是一种行为型设计模式,它定义了一种一对多的依赖关系,当一个对象的状态发生改变时,其所有依赖者都会收到通知并自动更新。定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知,进行广播通知。原创 2023-10-23 22:56:21 · 291 阅读 · 0 评论 -
行为型模式-备忘录模式
备忘录模式保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。原创 2023-10-22 22:21:49 · 563 阅读 · 0 评论 -
行为型模式-中介者模式
是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。中介者模式属于行为型模式。原创 2023-10-19 22:34:37 · 415 阅读 · 0 评论 -
行为型模式-迭代器模式
迭代器模式是 Java 和 .Net 编程环境中非常常用的设计模式。这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。原创 2023-10-16 21:41:44 · 254 阅读 · 0 评论 -
行为型模式-解释器模式
提供了评估语言的语法或表达式的方式,它属于行为型模式。这种模式实现了一个表达式接口,该接口解释一个特定的上下文。这种模式被用在 SQL 解析、符号处理引擎等。原创 2023-09-25 22:14:01 · 380 阅读 · 0 评论 -
行为型模式-命令模式
是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。意图:将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化。主要解决:在软件系统中,行为请求者与行为实现者通常是一种紧耦合的关系,但某些场合,比如需要对行为进行记录、撤销或重做、事务等处理时,这种无法抵御变化的紧耦合的设计就不太合原创 2023-09-22 21:40:15 · 312 阅读 · 0 评论 -
行为型模式-责任链模式
为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。原创 2023-09-17 11:56:23 · 205 阅读 · 0 评论 -
结构型模式-代理模式
一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。1、Windows 里面的快捷方式。 2、猪八戒去找高翠兰结果是孙悟空变的,可以这样理解:把高翠兰的外貌抽象出来,高翠兰本人和孙悟空都实现了这个接口,猪八戒访问高翠兰的时候看不出来这个是孙悟空,所以说孙悟空是高翠兰代理类。 3、买火车票不一定在火车站买,也可以去代售点。 4、一张支票或银行存单是账户中资金的代理。支票在市场交易中用来代替现金,并提供对签发人账号上资金的控制。原创 2023-09-14 23:30:40 · 362 阅读 · 0 评论 -
结构型模式-享元模式
主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式。享元模式尝试重用现有的同类对象,如果未找到匹配的对象,则创建新对象。我们将通过创建 5 个对象来画出 20 个分布于不同位置的圆来演示这种模式。由于只有 5 种可用的颜色,所以 color 属性被用来检查现有的Circle对象。原创 2023-09-13 23:09:04 · 262 阅读 · 0 评论 -
结构型模式-外观模式
隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。原创 2023-09-12 22:59:46 · 383 阅读 · 0 评论 -
结构型模式-装饰器模式
允许向一个现有的对象添加新的功能,同时又不改变其结构,这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。装饰器模式通过将对象包装在装饰器类中,以便动态地修改其行为。这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。意图:动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式相比生成子类更为灵活。主要解决:一般的,我们为了扩展一个类经常使用继承方式实现,由于继承为类引入静态特征,并且随着扩展功能的增多,子类会很膨胀。原创 2023-09-11 23:11:33 · 247 阅读 · 0 评论 -
结构型模式-组合模式
1、算术表达式包括操作数、操作符和另一个操作数,其中,另一个操作数也可以是操作数、操作符和另一个操作数。它在我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。2、您希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。在使用组合模式时,其叶子和树枝的声明都是实现类,而不是接口,违反了依赖倒置原则。部分、整体场景,如树形菜单,文件、文件夹的管理。树枝和叶子实现统一接口,树枝内部组合该接口。原创 2023-09-09 15:51:34 · 361 阅读 · 0 评论 -
创建型模式-建造者模式
我们假设一个快餐店的商业案例,其中,一个典型的套餐可以是一个汉堡(Burger)和一杯冷饮(Cold drink)。主要解决在软件系统中,有时候面临着"一个复杂对象"的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定。1、去肯德基,汉堡、可乐、薯条、炸鸡翅等是不变的,而其组合是经常变化的,生成出所谓的"套餐"。接口的实体类,汉堡是包在纸盒中,冷饮是装在瓶子中。使用多个简单的对象一步一步构建成一个复杂的对象。原创 2023-08-26 22:21:10 · 994 阅读 · 0 评论 -
创建型模式-原型模式
7、在实际项目中,原型模式很少单独出现,一般是和工厂方法模式一起出现,通过 clone 的方法创建一个对象,然后由工厂方法提供给调用者。1、配备克隆方法需要对类的功能进行通盘考虑,这对于全新的类不是很难,但对于已有的类不一定很容易,特别当一个类引用不支持串行化的间接对象,或者引用含有循环结构的时候。原型模式是用于创建重复的对象,同时又能保证性能,这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆,当直接创建对象的代价比较大时,则采用这种模式。利用已有的一个原型对象,快速地生成和原型对象一样的实例。原创 2023-08-29 00:13:13 · 567 阅读 · 0 评论 -
结构型模式-适配器模式
2、想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作,这些源类不一定有一致的接口。(比如老虎和飞禽,现在多了一个飞虎,在不增加实体的需求下,增加一个适配器,在里面包容一个虎对象,实现飞的接口。比如,明明看到调用的是 A 接口,其实内部被适配成了 B 接口的实现,一个系统如果太多出现这种情况,无异于一场灾难。将一个类的接口转换成客户希望的另外一个接口。主要解决在软件系统中,常常要将一些"现存的对象"放到新的环境中,而新环境要求的接口是现对象不能满足的。原创 2023-09-03 16:24:42 · 596 阅读 · 0 评论 -
结构型模式-桥接模式
桥接模式的目的是将抽象与实现分离,使它们可以独立地变化,该模式通过将一个对象的抽象部分与它的实现部分分离,使它们可以独立地改变。它通过组合的方式,而不是继承的方式,将抽象和实现的部分连接起来。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类,这两种类型的类可被结构化改变而互不影响。在有多种可能会变化的情况下,用继承会造成类爆炸问题,扩展起来不灵活。将抽象部分与实现部分分离,使它们都可以独立的变化。原创 2023-09-04 23:56:55 · 875 阅读 · 0 评论 -
结构型模式-过滤器模式
允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来。这种类型的设计模式属于结构型模式,它结合多个标准来获得单一标准。原创 2023-09-07 23:00:18 · 326 阅读 · 0 评论 -
创建型模式-单例模式
这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。一个全局使用的类频繁地创建与销毁。当您想控制实例数目,节省系统资源的时候。判断系统是否已经有这个单例,如果有则返回,如果没有则创建。构造函数是私有的。1. 全局共享资源:当你需要一个全局的对象来存储全局的信息,例如配置信息,环境变量等,可以使用单例模式。原创 2023-08-25 00:15:52 · 492 阅读 · 1 评论 -
创建型模式-抽象工厂模式
在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。抽象工厂模式提供了一种创建一系列相关或相互依赖对象的接口,而无需指定具体实现类。通过使用抽象工厂模式,可以将客户端与具体产品的创建过程解耦,使得客户端可以通过工厂接口来创建一族产品。:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。:主要解决接口选择的问题。:系统的产品有多于一个的产品族,而系统只消费其中某一族的产品。:在一个产品族里面,定义多个产品。原创 2023-08-23 22:48:48 · 624 阅读 · 0 评论 -
创建型模式——工厂模式
每次增加一个产品时,都需要增加一个具体类和对象实现工厂,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。通过使用工厂模式,可以将对象的创建与使用代码分离,提供一种统一的接口来创建不同类型的对象。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。让其子类实现工厂接口,返回的也是一个抽象的产品。主要解决接口选择的问题。原创 2023-08-20 16:37:28 · 185 阅读 · 1 评论