探索设计模式
文章平均质量分 65
举通俗易懂的例子、用代码示例来深入理解设计模式。
脱发的老袁
这个作者很懒,什么都没留下…
展开
-
【设计模式】23种设计模式详解
创建型设计模式主要关注对象的创建过程,目的是为了更加高效地创建对象并节省系统资源。结构型设计模式主要关注对象之间的组合和关系,目的是为了解耦和易于扩展。行为型设计模式主要关注对象之间的交互和行为,目的是为了更好地组织和管理对象之间的通信和相互作用。工厂模式、抽象工厂模式、单例模式、建造者模式、原型模式适配器模式、桥接模式、组合模式、装饰器模式、外观模式、享元模式、代理模式模板方法模式、命令模式、迭代器模式、观察者模式、状态模式、策略模式、责任链模式、备忘录模式、访问者模式、解释器模式、中介者模式原创 2023-07-19 14:50:48 · 78 阅读 · 0 评论 -
【设计模式|创建型】工厂模式(Factory Pattern)
假设你是一家汽车制造公司,你的工厂可以生产不同类型的汽车,比如轿车和SUV。每种类型的汽车都有自己的特点和功能,但它们都是汽车的一种。原创 2023-07-19 16:34:34 · 59 阅读 · 0 评论 -
【设计模式|创建型】抽象工厂模式(Abstract Factory Pattern)
假设我们正在开发一个游戏,游戏中有不同种类的武器,包括剑、魔杖和弓箭。每种武器都有不同的攻击方法和特殊效果。我们可以使用抽象工厂模式来创建不同类型的武器。原创 2023-07-20 09:23:18 · 63 阅读 · 0 评论 -
【设计模式|创建型】单例模式 饿汉、懒汉、静态内部类、枚举、破坏单例与防破坏单例
单例模式是一种创建型设计模式,用于确保一个类只有一个实例,并提供全局访问点。提供唯一的实例,避免产生多个实例造成资源浪费。全局访问点使得其他对象可以方便地访问该实例。原创 2023-07-19 15:11:08 · 94 阅读 · 0 评论 -
【设计模式|创建型】建造者模式(Builder Pattern)
假设我们要建造一座房子,这个房子有很多不同的部分,比如墙壁、地板、屋顶等等。我们可以使用建造者模式来创建这座房子。首先,我们定义一个房子类 House,它有一些属性,比如墙壁、地板和屋顶。然后,我们创建一个建造者类 HouseBuilder,它有一些方法用于构建房子的不同部分。最后,我们创建一个指挥者类 HouseDirector,它负责指导建造者如何构建房子。原创 2023-07-20 13:14:32 · 57 阅读 · 0 评论 -
【设计模式|创建型】原型模式(Prototype Pattern)
假设我们有一个游戏中的敌人类 Enemy,每个敌人都有一个独特的外观和属性。在游戏中,敌人的数量可能非常多,而且每个敌人的创建过程可能比较复杂。这时,我们可以使用原型模式来创建敌人对象。原创 2023-07-20 13:19:25 · 64 阅读 · 0 评论 -
【设计模式|结构型】适配器模式(Adapter Pattern)
假设你有一个美国制造的电子设备,它的插头是美国标准的两脚插头(Type A插头),而你想在中国使用它,但中国的电源插座是中国标准的三脚插座(Type I插座)。这两种插头标准是不兼容的,无法直接连接。这时,你需要一个适配器来解决这个问题。原创 2023-07-20 15:16:03 · 76 阅读 · 0 评论 -
【设计模式|结构型】装饰器模式(Decorator Pattern)
假设你有一个咖啡店,你的基本咖啡是黑咖啡。然而,你希望能够为客户提供添加额外配料(如牛奶、糖、巧克力等)的选项,而不需要为每种配料创建一个新的咖啡类。这时,你可以使用装饰器模式来实现。原创 2023-07-20 16:58:36 · 59 阅读 · 0 评论 -
【设计模式|结构型】享元模式(Flyweight Pattern)
假设我们有一个围棋游戏,棋盘上有很多棋子,每个棋子都有自己的位置和颜色。如果每个棋子都创建一个对象,那么内存占用会很大。而使用享元模式,我们可以共享相同颜色的棋子对象,只需记录它们的位置,从而减少内存占用。原创 2023-07-26 16:14:04 · 152 阅读 · 0 评论 -
【设计模式|结构型】组合模式(Composite Pattern)
假设我们要设计一个餐厅菜单系统,菜单可以包含单个菜品和菜单套餐。每个菜品有自己的名称、价格和描述,而菜单套餐可以包含多个菜品和其他菜单套餐。这时可以使用组合模式来设计这个餐厅菜单系统。原创 2023-07-26 08:56:29 · 438 阅读 · 0 评论 -
【设计模式|结构型】代理模式(Proxy Pattern)
假设你家里有一个保姆,你不想让保姆直接接触你的贵重物品,但是你需要让保姆帮你照顾这些物品。这时,你可以使用一个代理来解决这个问题。原创 2023-07-26 15:17:21 · 422 阅读 · 0 评论 -
【设计模式|结构型】桥接模式(Bridge Pattern)
假设我们有一个汽车制造公司,该公司可以生产多种型号的汽车,例如轿车、SUV和卡车。同时,公司也提供了多种颜色的汽车,例如红色、蓝色和黑色。后续还会可能会增加车型或者增加颜色。这时,可以使用桥接模式。原创 2023-07-24 16:27:24 · 180 阅读 · 0 评论 -
【设计模式|结构型】外观模式(Facade Pattern)
外观模式就像是一家快餐店的服务员。当你去快餐店点餐时,服务员会告诉你今天的特色菜、套餐、饮料等等,然后你只需要告诉服务员你想要什么,服务员就会帮你把所有食物和饮料都准备好,最后一起送到你的桌子上。在这个例子中,服务员就是外观模式,他隐藏了所有的复杂操作和细节,只提供了一个简单的接口,让顾客可以轻松地点餐。同样地,外观模式也隐藏了系统的复杂性,提供了一个简单的接口,让客户端可以方便地使用系统中的功能。原创 2023-07-26 09:00:59 · 228 阅读 · 0 评论 -
【设计模式|行为型】模板方法模式(Template Method Pattern)
详细介绍模板方法模式(Template Method Pattern),并说明优缺点与使用场景模板方法模式是一种行为设计模式,它定义了一个算法的骨架,将一些步骤的实现延迟到子类中。在模板方法模式中,一个抽象类公开定义了执行它的方法的方式/顺序,并将一些步骤的具体实现委托给子类。模板方法模式是一种典型的通过继承来实现代码复用的设计模式,它遵循了开闭原则,即抽象类定义了算法的骨架,而具体步骤的实现可以在子类中灵活变化。原创 2023-07-24 14:22:37 · 192 阅读 · 0 评论 -
【设计模式|行为型】观察者模式(Observer Pattern)
详细介绍观察者模式(Observer Pattern),并说明优缺点与使用场景: 观察者模式是一种行为型设计模式,它定义了对象之间的一种一对多的依赖关系,使得当一个对象的状态发生变化时,所有依赖它的对象都会自动收到通知并更新。该模式包含两个核心角色:被观察者(Subject)和观察者(Observer)。被观察者维护了一个观察者列表,提供了订阅、取消订阅、通知等方法。当被观察者的状态变化时,会遍历观察者列表,并逐个调用观察者的更新方法。原创 2023-07-24 11:16:37 · 248 阅读 · 0 评论 -
【设计模式|行为型】命令模式(Command Pattern)
命令模式(Command Pattern)是一种行为设计模式,它将请求封装为一个对象,以便在不同的请求者和接收者之间进行解耦、参数化和操作的队列化。命令模式允许你将具体的请求封装为对象,这些对象之间彼此独立,并且可以用不同的请求对客户端进行参数化。原创 2023-07-26 16:20:58 · 639 阅读 · 0 评论 -
【设计模式|行为型】备忘录模式(Memento Pattern)
备忘录模式是一种行为型设计模式,通过捕获一个对象的内部状态,并在该对象之外保存这个状态,以便在需要时恢复对象到原先的状态。和。备忘录模式的核心思想是将对象的状态保存在一个独立的对象中,以便以后恢复。通过使用备忘录模式,我们可以轻松地实现对象状态的保存和恢复,同时也提高了系统的可维护性和扩展性。原创 2023-07-26 16:32:27 · 312 阅读 · 0 评论 -
【设计模式|行为型】迭代器模式(Iterator Pattern)
迭代器模式是一种行为型设计模式,它允许客户端通过一个逐个访问集合元素的接口来访问一个聚合对象中的每个元素,而不需要直接暴露该对象的内部表示方式。迭代器模式将遍历逻辑与聚合对象分离,使得这两部分可以独立地变化,从而使设计更加灵活。迭代器模式包含两个核心角色:迭代器和聚合对象。迭代器是一个对象,它实现了访问聚合对象中元素的接口。迭代器具有两个基本的操作:访问下一个元素和判断是否还有下一个元素。聚合对象是若干个元素的集合,它通常提供一个工厂方法,用于返回它的迭代器。原创 2023-07-24 14:40:59 · 108 阅读 · 0 评论 -
【设计模式|行为型】策略模式(Strategy Pattern)
策略模式(Strategy Pattern)是一种行为型设计模式,它定义了算法族(一组算法),分别封装起来,使它们之间可以互相替换,而且算法的变化可以独立于使用它的客户端。DiscountStrategy 是策略接口,PercentageDiscountStrategy 和 FixedAmountDiscountStrategy 是具体的策略实现类,Client 是客户端代码,用来指定折扣策略。2、举例实际应用中的场景实例: 一个常见的场景就是商场打折活动,不同的活动有不同的折扣策略。原创 2023-07-24 11:25:00 · 188 阅读 · 0 评论 -
【设计模式|行为型】解释器模式(Interpreter Pattern)
解释器模式是一种行为型设计模式,它定义了一种语言文法,并解释执行该语言中的句子。该模式通过将语法解析过程分离为解释器类的层次结构来实现。原创 2023-07-26 10:00:46 · 110 阅读 · 0 评论 -
【设计模式|行为型】状态模式(State Pattern)
假设要做个电梯控制系统。电梯可以处于不同的状态:已开门:只能关门操作已关门:可以开门,可以上升,可以下降开门中:不可做任何操作关门中:不可做任何操作上升中:不可做任何操作下降中:不可做任何操作这时可以使用状态模式。原创 2023-07-26 16:35:54 · 766 阅读 · 0 评论 -
【设计模式|行为型】访问者模式(Visitor Pattern)
具体的实现中,抽象访问者接口可以定义访问文件夹和文件的方法,具体访问者类可以实现这些方法来完成不同的操作。抽象元素接口可以定义接受访问者的方法,具体元素类可以实现这个方法并把访问者传递给具体元素的子元素,以便它们也能接受访问者的访问。在软件开发中,有时需要对一个复杂的对象结构中的各个元素进行不同的操作,例如,计算对象结构中元素的总和、对每个元素进行特定的处理等。访问者模式通过将操作封装在一个访问者类中,使得可以在不改变对象结构的情况下,对对象结构中的每个元素应用不同的操作。然后,实现具体的访问者类。原创 2023-07-27 08:16:07 · 88 阅读 · 0 评论 -
【设计模式|行为型】中介者模式(Mediator Pattern)
中介者模式(Mediator Pattern)是一种行为型设计模式,它通过封装一系列对象之间的交互方式,使这些对象能够互相通信而不需要直接相互引用。中介者模式通过集中控制对象的交互,使得对象之间的耦合度降低,同时也提高了系统的可维护性和可扩展性。原创 2023-07-26 16:45:15 · 373 阅读 · 0 评论 -
【设计模式|行为型】职责链模式(Chain of Responsibility Pattern)
职责链模式是一种行为型设计模式,它允许多个对象在处理请求时,每个对象都有机会处理请求,从而避免了请求发送者和接收者之间的直接耦合。通过将处理请求的对象按照其处理能力的顺序连接成一条链,请求将沿着链传递,直到有一个对象能够处理它。在职责链模式中,通常使用一个抽象处理者(Handler)来定义处理请求的方法。每个具体的处理者类都实现了这个抽象处理者,并包含一个指向下一个处理者的引用。当请求到达一个处理者时,它可以选择处理请求或将它传递给下一个处理者。这样,请求将依次通过每个处理者,直到有一个处理者能够处理它。原创 2023-07-27 08:15:54 · 170 阅读 · 0 评论