设计模式
文章平均质量分 90
五百五。
大连交通大学软件工程研究生在读,深度学习和c++开发学习中,欢迎评论交流
展开
-
不得不说的行为型模式-解释器模式
该模式通过定义一个解释器来解释语言中的表达式,实现语言的解释和操作的执行。非终结符表达式(Non-Terminal Expression):实现了抽象表达式中的解释方法,用于解释语言中的非终结符表达式,例如表达式、条件等。抽象表达式(Abstract Expression):定义了解释器的接口,包含一个解释方法,该方法接受一个上下文作为参数,用于解释语言中的表达式。终结符表达式(Terminal Expression):实现了抽象表达式中的解释方法,用于解释语言中的终结符表达式,例如变量、常量等。原创 2023-05-01 13:12:55 · 594 阅读 · 0 评论 -
不得不说的行为型模式-命令模式
在该系统中,每个订单都对应一个 ConcreteCommand 对象,该对象包含了一个 Receiver 对象,并实现了 execute() 方法,用于执行订单处理逻辑。在命令模式中,客户端不知道命令的接收者是谁,而在策略模式中,客户端通常知道策略对象的存在,并在运行时决定使用哪个策略对象。同时,它还支持撤销和重做等操作。命令模式(Command Pattern)是一种行为型设计模式,它允许将请求封装成对象,从而让你能够用不同的请求对客户端进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。原创 2023-04-30 00:15:00 · 710 阅读 · 0 评论 -
不得不说的行为型模式-责任链模式
当请求进入责任链时,它会从链的第一个处理器开始,依次向下传递,直到找到能够处理该请求的处理器为止。在链中的任何一个处理器都可以通过它的接口来发送请求,并将请求传递给下一个处理器。我们可以看到,在每个请求中,只有能够处理该请求的处理器才会处理该请求,而其他处理器则将其传递给下一个处理器。当一个请求从链的一端进入时,处理器链会依次尝试处理该请求,直到找到能够处理该请求的处理器为止。每个具体处理器只负责处理与自己相关的请求,从而将复杂的业务逻辑拆分成多个小的处理器,让每个处理器聚焦于自己的领域,更加清晰明了。原创 2023-04-29 10:55:29 · 565 阅读 · 0 评论 -
不得不说的结构型模式-代理模式
答:代理模式和适配器模式都是结构型设计模式,但它们的主要目的不同。代理模式是为了增强对象的功能,保护对象的访问,以及实现延迟加载等功能,而适配器模式是为了将一个接口转换为另一个接口,以便让不兼容的类能够合作工作。在代理模式中,代理对象和原始对象通常具有相同的接口,而在适配器模式中,适配器对象和被适配对象通常具有不同的接口。此外,在代理模式中,代理对象通常可以控制对原始对象的访问,可以拦截和过滤一些方法调用,而在适配器模式中,适配器对象主要是为了兼容不同的接口而存在,不涉及控制访问和拦截调用等功能。原创 2023-04-28 11:00:53 · 502 阅读 · 0 评论 -
不得不说的结构型模式-享元模式
在享元模式中,通过将对象的内部状态和外部状态分离,将一些共享内部状态的对象设计成享元,即可在系统中共享这些对象,而外部状态则由客户端在使用时传入。接下来定义一个享元工厂类 BookFactory,它负责创建和管理图书对象,同时提供一个借阅方法 borrowBook,该方法接收借阅人的姓名和图书的名称,根据图书名称查找对应的图书对象,将借阅人的姓名作为外部状态传入图书对象的 showInfo 方法中。是一种结构型模式,它通过共享对象来减少系统中对象的数量,从而降低系统的内存占用和运行开销。原创 2023-04-27 00:15:00 · 399 阅读 · 0 评论 -
不得不的创建型模式-原型模式
另外,原型模式可以创建多个对象,每个对象的成员变量的值都可以不同,而单例模式则只能创建一个对象,该对象的成员变量的值是唯一的。假设我们需要在程序中使用一个存储单元信息的类,我们可以先创建一个该类的原型对象,然后通过复制这个原型对象来创建新的存储单元对象,避免每次创建新的存储单元时都需要重新初始化对象的成员变量。原型模式通过将已有对象进行复制来创建新的对象,其中需要注意的是,对于复制出来的对象,它们的成员变量的值与原型对象是相同的,但是它们是不同的对象,拥有不同的内存地址。原创 2023-04-26 00:45:00 · 406 阅读 · 0 评论 -
不得不的创建型模式-建造者模式
在客户端代码中,首先创建了一个指挥者对象和一个具体建造者对象,然后将具体建造者对象传递给指挥者对象,并调用 `Construct` 方法来控制对象的构建过程。其中,产品类表示被建造的复杂对象,抽象建造者定义了构建该对象所需的所有步骤和方法,具体建造者实现这些方法来构建对象,而指挥者负责协调和控制这些步骤的顺序和过程。其中,产品类表示被建造的复杂对象,抽象建造者定义了构建该对象所需的所有步骤和方法,具体建造者实现这些方法来构建对象,而指挥者负责协调和控制这些步骤的顺序和过程。问题1:什么是建造者模式?原创 2023-04-25 00:15:00 · 926 阅读 · 0 评论 -
不得不说的结构型模式-装饰器模式
设计模式之装饰器模式,不得不会的知识原创 2023-04-23 08:23:39 · 1362 阅读 · 2 评论 -
不得不说的结构型模式-组合模式
组合模式是一种结构型设计模式,它允许您将对象组合成树形结构,并以统一的方式处理它们。该模式基于递归组合的想法,其中一个组件可以由许多更小的组件组成,这些更小的组件可以由更小的组件组成,以此类推。在组合模式中,有两种类型的组件:单个对象和组合对象。单个对象是组成树的最基本的对象,而组合对象则是由多个单个对象和组合对象组成的复杂对象。每个组件都有一个共同的接口,该接口定义了执行操作的方法。组合对象可以递归地调用它们的子组件来执行相同的操作。组合模式的实际应用非常广泛。原创 2023-04-22 00:15:00 · 1294 阅读 · 0 评论 -
不得不说的结构型模式-桥接模式
由于抽象类和实现类是分离的,因此可以随时切换和替换不同的实现类,而不影响抽象部分的代码,从而实现代码的复用。在桥接模式中,抽象和实现是分离的,可以将多个抽象类和多个实现类进行组合,从而实现代码的复用。具体来说,桥接模式中的抽象类可以作为其他类的父类,实现类可以通过继承抽象类来重复利用代码。可以方便地切换和替换实现:在桥接模式中,抽象和实现是分离的,可以随时切换和替换不同的实现,而不影响抽象部分的代码。可以方便地扩展和增加抽象和实现:由于抽象和实现是分离的,可以方便地增加新的抽象和实现,而不影响已有的代码。原创 2023-04-20 00:30:00 · 1180 阅读 · 0 评论 -
不得不说的结构型模式-适配器模式
在这个示例代码中,我们需要将Adaptee类的SpecificRequest()方法适配成ITarget接口的Request()方法,我们定义了ITarget接口和Adaptee类,并在Adapter类中通过包装Adaptee对象来实现接口转换。在对象适配器中,适配器通过包装一个需要适配的对象来实现接口转换,它将需要适配的对象作为成员变量,同时实现目标接口。在类适配器中,适配器通过多重继承来实现接口转换,它继承需要适配的类和目标接口,同时重写目标接口中的方法来实现接口转换。接下来,我们定义一个已有的类。原创 2023-04-21 00:45:00 · 1179 阅读 · 1 评论 -
不得不说的创建型模式-单例模式
通过使用单例模式,我们可以方便地管理和控制全局唯一的对象,避免了重复创建对象的开销和资源浪费,提高了程序的性能和效率。否则,直接返回instance。不过需要注意的是,在使用静态局部变量时需要考虑到线程安全的问题,因为静态局部变量只会被初始化一次,如果多个线程同时访问GetInstance()函数,可能会导致初始化顺序的问题,从而出现程序异常。不过需要注意的是,在使用互斥量mutex时需要考虑到性能问题,因为每次调用GetInstance()函数时都会涉及到锁的竞争和释放操作,可能会影响程序的性能。原创 2023-04-19 00:15:00 · 1215 阅读 · 0 评论 -
不得不说的创建型模式-抽象工厂模式
游戏引擎:游戏引擎中需要创建很多不同的对象,例如纹理、音效、粒子效果等,而这些对象又需要根据不同的平台进行优化和适配,因此我们可以使用抽象工厂模式来创建不同平台下的游戏对象。操作系统界面:不同的操作系统有不同的用户界面,例如Windows和Mac OS X,它们的用户界面是不同的,因此我们可以使用抽象工厂模式来创建不同操作系统的用户界面。由于抽象工厂只负责创建一系列相关的产品,因此在需要创建新的产品时,可能需要修改抽象工厂的接口和所有的具体工厂类,这样会导致系统变得不够灵活。保证了产品族内部的一致性。原创 2023-04-17 00:00:00 · 1004 阅读 · 1 评论 -
不得不说的创建型模式-工厂方法模式
在上面的代码中,抽象产品类Product定义了产品类的接口,具体产品类ProductA和ProductB实现了该接口,抽象工厂类Factory定义了工厂方法的接口,具体工厂类FactoryA和FactoryB实现了该接口,并重载了createProduct方法来创建具体产品对象。厂方法模式中,我们可以通过定义不同的具体工厂类来创建不同的具体产品对象,从而使得客户端代码与具体产品类的实现分离,提高了系统的灵活性和可维护性。具体的产品对象的创建延迟到了具体的工厂类中,这也就是工厂方法模式的核心思想。原创 2023-04-18 00:15:00 · 1585 阅读 · 2 评论