设计模式
提里奥丶弗丁
一名二手程序猿,分享一些实用和有趣的技术
展开
-
设计模式-责任链模式
在Main类中,我们创建了处理器链,并将请求发送给链的第一个处理器。责任链模式可以帮助我们实现请求的处理流程的灵活性和可扩展性,每个处理器都可以选择处理请求或将请求传递给下一个处理器。2. 创建具体的处理器类,继承抽象处理器类,并实现处理请求的方法。在处理请求的方法中,可以选择将请求传递给下一个处理器或自行处理请求。1. 定义一个抽象处理器(Handler)类,其中包含一个指向下一个处理器的引用,并定义一个处理请求的方法。3. 在客户端代码中,创建处理器链,并将请求发送给链的第一个处理器。原创 2023-11-01 16:06:32 · 577 阅读 · 0 评论 -
设计模式-迭代子模式
在Main类中,我们创建了具体聚合对象的实例,并添加了一些元素。然后,我们通过调用聚合对象的createIterator()方法获取迭代子对象,并使用迭代子对象顺序访问聚合对象中的元素。迭代子模式是一种行为设计模式,它提供了一种访问和遍历聚合对象中各个元素的方法,而不需要暴露聚合对象的内部表示。迭代子模式将遍历聚合对象的责任交给了迭代子对象,从而实现了聚合对象和迭代子对象的解耦。迭代子模式是一种重要的设计模式,它可以帮助我们实现对聚合对象中元素的访问和遍历,同时保持聚合对象的封装性。原创 2023-11-01 15:49:36 · 410 阅读 · 0 评论 -
设计模式-访问者模式
在Main类中,我们创建了具体元素的实例,并创建了具体访问者的实例。然后,我们调用元素的accept()方法,并将访问者作为参数传递进去,从而实现了对元素的操作。它将操作封装在访问者对象中,使得可以在不同的对象上执行不同的操作,从而实现了操作和对象的解耦。访问者模式是一种行为设计模式,它允许你在不修改现有对象结构的情况下,定义新的操作。访问者模式通过将操作封装在一个访问者对象中,使得可以在不同的对象上执行不同的操作,从而实现了操作和对象的解耦。元素表示对象结构中的元素,访问者表示要对元素执行的操作。原创 2023-11-01 13:53:14 · 284 阅读 · 0 评论 -
设计模式-模板方法模式
在上面的示例中,AbstractClass是一个抽象类,定义了一个模板方法templateMethod(),以及一些抽象方法step1()和step3()。在Java中,模板方法模式通常由一个抽象类来实现,该抽象类定义了一个模板方法,该方法定义了算法的骨架,并调用了一系列的抽象方法或具体方法来完成算法的各个步骤。模板方法模式是一种行为设计模式,它定义了一个算法的骨架,将一些步骤的实现延迟到子类中。模板方法模式通过将算法的通用部分放在父类中,而将具体的实现细节留给子类来实现,从而实现代码的复用和扩展。原创 2023-11-01 13:51:38 · 378 阅读 · 0 评论 -
设计模式-状态模式
在上面的示例中,我们定义了一个状态接口State,并有两个具体状态类ConcreteStateA和ConcreteStateB,它们分别实现了状态接口的方法。然后,我们创建了一个环境类Context,它持有一个状态接口的引用,并提供了一个设置状态和执行请求的方法。该模式将对象的行为封装在不同的状态类中,使得对象可以根据当前状态来选择不同的行为。状态模式可以帮助我们实现对象的状态管理,使得对象的行为可以根据内部状态的改变而改变。3. 环境类(Context):持有一个状态接口的引用,用于调用具体的状态类。原创 2023-10-31 11:47:40 · 680 阅读 · 0 评论 -
设计模式-策略模式
在上面的示例中,我们定义了一个策略接口Strategy,并有两个具体策略类ConcreteStrategyA和ConcreteStrategyB,它们分别实现了策略接口的方法。然后,我们创建了一个环境类Context,它持有一个策略接口的引用,并提供了一个执行策略的方法executeStrategy()。在Main类中,我们创建了具体的策略对象,并将其传递给环境对象,然后调用executeStrategy()方法执行策略。3. 环境类(Context):持有一个策略接口的引用,用于调用具体的策略类。原创 2023-10-31 11:46:30 · 246 阅读 · 0 评论 -
设计模式-中介者模式
在这个示例中,我们定义了一个简单的中介者模式,其中Mediator接口表示中介者,ConcreteMediator类表示具体中介者,Colleague类表示同事类。在Main类中,我们创建了一个中介者对象、两个同事对象,并演示了它们之间的交互。中介者模式是一种行为设计模式,它通过将对象之间的交互委托给一个中介者对象来减少对象之间的直接耦合。同事类通过中介者对象来进行交互,而不是直接与其他同事类交互。2. 具体中介者类(Concrete Mediator):它是中介者接口的具体实现,负责协调对象之间的交互。原创 2023-10-24 11:38:48 · 317 阅读 · 0 评论 -
设计模式-命令模式
在这个示例中,我们定义了一个简单的命令模式,其中Receiver类表示接收者,ConcreteCommand类表示具体命令,Invoker类表示调用者。在Main类中,我们创建了一个接收者对象、一个具体命令对象和一个调用者对象,并演示了如何执行命令。命令模式是一种行为设计模式,它将请求封装成一个对象,从而允许您根据不同的请求将客户端参数化,并将请求排队或记录日志,以及支持可撤销的操作。2. 具体命令类(Concrete Command):它是命令接口的具体实现,封装了执行特定操作的代码。原创 2023-10-24 11:35:28 · 284 阅读 · 0 评论 -
设计模式-解释器模式
我们使用了终结符表达式(TerminalExpression)和非终结符表达式(Non-terminalExpression)来表示语法规则,并使用上下文(Context)来传递输入。3. 非终结符表达式(Non-terminal Expression):它是抽象表达式的子类,表示语法规则中的非终结符,即可以进一步解释的复合单元。通常会有多个具体表达式类继承或实现它。2. 终结符表达式(Terminal Expression):它是抽象表达式的子类,表示语法规则中的终结符,即不再可以进一步解释的最小单元。原创 2023-10-23 10:48:22 · 162 阅读 · 0 评论 -
设计模式-备忘录模式
这个示例中,Originator类表示需要保存状态的对象,Memento类表示备忘录对象,Caretaker类负责保存和恢复备忘录。在Main类中,我们创建了一个Originator对象和一个Caretaker对象,并演示了如何保存和恢复对象的状态。备忘录模式是一种行为设计模式,它允许在不破坏封装的情况下捕获和恢复对象的内部状态。该模式通常用于需要保存和恢复对象状态的情况,例如撤销操作或错误恢复。它可以创建一个备忘录对象来保存当前状态,并可以使用备忘录对象来恢复先前的状态。原创 2023-10-23 10:51:11 · 210 阅读 · 0 评论 -
设计模式-组合模式
在这个示例中,Component是抽象类或接口,定义了组合对象和叶子对象的共同行为。Leaf类是叶子类,实现了Component接口,并表示组合中的叶子对象。3. 创建一个组合类(Composite),实现了Component接口,并表示组合中的组合对象。组合对象可以包含其他组合对象或叶子对象。1. 创建一个抽象类或接口(Component),定义了组合对象和叶子对象的共同行为。组合对象可以包含其他组合对象或叶子对象。2. 创建一个叶子类(Leaf),实现了Component接口,并表示组合中的叶子对象。原创 2023-10-20 15:34:37 · 363 阅读 · 0 评论 -
设计模式-装饰器模式
RedShapeDecorator类是具体的装饰器类,继承自装饰器类,并在调用原始对象的draw方法之前或之后添加特定的功能。装饰器模式(Decorator Pattern)是一种设计模式,它允许在运行时动态地给一个对象添加额外的功能,而不需要修改原始对象的结构。4. 创建具体的装饰器类(具体的Decorator类),继承自装饰器类,并在调用原始对象的方法之前或之后添加特定的功能。2. 创建一个具体的实现类(ConcreteComponent),实现了接口,并提供了原始对象的具体实现。原创 2023-10-20 14:50:06 · 368 阅读 · 0 评论 -
设计模式-外观模式
在这个示例中,SubsystemA、SubsystemB和SubsystemC是子系统类,它们实现了具体的功能。Facade类是外观类,它提供了一个简单的接口operation来访问子系统中的一组接口。外观模式(Facade Pattern)是一种设计模式,它提供了一个统一的接口,用于访问子系统中的一组接口。1. 创建一个外观类(Facade),它提供了一个简单的接口来访问子系统中的一组接口。客户端只需要调用外观类的方法,而不需要直接与子系统类交互。这些子系统类可以是已经存在的类,也可以是新创建的类。原创 2023-10-20 11:21:52 · 401 阅读 · 0 评论 -
设计模式-享元模式
Circle类是具体的享元类,实现了Shape接口,并包含内部状态(color)和外部状态(无)。它维护一个circleMap来存储已经创建的享元对象,并在需要时返回已经创建的对象。2. 创建一个具体的享元类(ConcreteFlyweight),实现了接口,并包含内部状态和外部状态。3. 创建一个享元工厂类(FlyweightFactory),用于管理和创建享元对象。它维护一个享元对象的池,以便在需要时返回已经创建的享元对象。它适用于需要创建大量相似对象的场景,可以显著减少内存占用和对象创建的开销。原创 2023-10-20 11:08:13 · 285 阅读 · 0 评论 -
设计模式-代理模式
在客户端中,通过实例化代理类来访问被代理对象。- 创建一个实现了InvocationHandler接口的代理处理器类(ProxyHandler),在invoke方法中实现对被代理对象方法的调用和额外逻辑的处理。- 创建一个代理类(ProxySubject),实现了接口,并在内部持有一个被代理对象的引用。- 创建一个接口(Subject),定义了被代理对象和代理对象的共同行为。- 创建一个接口(Subject),定义了被代理对象和代理对象的共同行为。- 在客户端中,通过调用代理对象的方法来访问被代理对象。原创 2023-10-20 10:09:02 · 358 阅读 · 0 评论 -
设计模式-桥接模式
在这个示例中,Shape类表示抽象,Color接口表示实现。Square和Circle类是具体的抽象,它们扩展了Shape类并使用了不同的Color实现。抽象表示高层接口或抽象,而实现表示低层的实现细节。桥接模式是一种设计模式,用于将抽象与其实现解耦,使它们可以独立地变化。在Java中,桥接模式可以用于分离抽象和实现的层次结构,并使它们可以独立演化。通过使用桥接模式,我们可以轻松地添加新的形状或颜色,而无需修改现有的代码。抽象和实现可以独立变化,提供了设计的灵活性和可扩展性。原创 2023-10-20 09:59:09 · 371 阅读 · 0 评论 -
设计模式-适配器模式
在上面的示例中,Target 是目标接口,Adaptee 是被适配类,Adapter 是适配器类。适配器类实现了目标接口,并在其方法中调用了被适配类的方法。当客户端调用适配器的 request() 方法时,实际上是通过适配器间接调用了被适配类的 specificRequest() 方法,从而实现了适配。3. 创建被适配类(Adaptee Class):被适配类是需要被适配的类,它拥有不兼容的接口。4. 在适配器类中实现目标接口的方法:适配器类中的方法将调用被适配类的方法来完成适配。原创 2023-10-19 11:51:40 · 452 阅读 · 0 评论 -
设计模式-原型模式
在这个示例中,Shape 是一个实现了 Cloneable 接口的抽象类,Rectangle 和 Square 是 Shape 的具体子类。ShapeCache 类负责存储和克隆原型对象。当需要一个新的 Shape 对象时,可以通过 ShapeCache.getShape 方法获取,这个方法会返回一个克隆的对象,而不是创建一个新的对象。原型模式是一种创建型设计模式,它用于创建重复的对象,同时又能保证性能。这种类型的设计模式是基于一个原型实例,通过复制(克隆)自身来创建新的对象。原创 2023-10-18 14:26:06 · 596 阅读 · 0 评论 -
设计模式-建造者模式
Builder 类有一系列的方法来设置 Car 的属性,每个方法返回 Builder 对象本身,以便可以链式调用这些方法。build 方法创建一个新的 Car 对象,并使用 Builder 的当前设置来初始化它。建造者模式(Builder Pattern)是一种创建型设计模式,它提供了一种构建复杂对象的有效方式。建造者模式将复杂对象的构建过程和其表示分离,使得同样的构建过程可以创建不同的表示。这种方式的好处是,客户端代码可以清晰地看到对象是如何被构建的,而且在添加新的属性时,不需要修改客户端代码。原创 2023-10-18 14:00:51 · 955 阅读 · 0 评论 -
设计模式-工厂方法模式
在这个示例中,AnimalFactory 是一个抽象工厂,它定义了一个 createAnimal 工厂方法。DogFactory 和 CatFactory 是具体的工厂,它们实现了 createAnimal 方法来创建 Dog 和 Cat 对象。这样,如果我们想改变创建对象的方式,我们只需要修改工厂,而不需要修改客户端代码。工厂方法模式是一种创建型设计模式,它提供了一种方式来封装对象的创建过程。在工厂方法模式中,客户端不直接创建对象,而是调用一个工厂方法来创建对象。原创 2023-10-18 13:43:13 · 365 阅读 · 0 评论 -
设计模式-生成器模式
在这个例子中,Builder 是抽象生成器,ConcreteBuilder 是它的具体实现。Director 是指挥者,它使用 Builder 的方法来创建 Product。客户端程序通过 Director 和 Builder 创建 Product。生成器模式(Builder Pattern)是一种创建型设计模式,用于构建复杂的对象。这种模式将构造代码和表示代码分离开来,使得同样的构造过程可以创建不同的表示。原创 2023-10-13 17:42:37 · 448 阅读 · 0 评论 -
设计模式-抽象工厂模式
在这个例子中,GUIFactory 是抽象工厂,WinFactory 和 OSXFactory 是它的具体实现。Button 是抽象产品,WinButton 和 OSXButton 是它的具体实现。客户端程序通过具体工厂创建具体产品。在Java中,抽象工厂模式提供了一种方式,可以封装一组具有共同主题的工厂。原创 2023-10-13 17:40:18 · 455 阅读 · 0 评论 -
设计模式-单例模式
在这个例子中,Singleton 类只有一个 Singleton 实例,并且 Singleton 类的构造函数是私有的,所以不能通过 new Singleton() 的方式创建新的实例。这种方式适合单线程环境,但在多线程环境下,可能会创建多个实例。为了在多线程环境下也能保证只有一个实例,可以使用 "双重检查锁定" 来实现单例,这种方式既保证了唯一性,并且线程安全,又延迟了单例的初始化,只有在真正使用时才会初始化。Java中的单例模式确保一个类只有一个实例,并提供一个全局访问点。原创 2023-10-13 16:56:40 · 777 阅读 · 0 评论 -
设计模式-观察者模式
Subject是被观察的对象,Observer是观察者。当Subject的状态发生改变时,它会通知所有注册的Observer。原创 2023-10-10 17:00:33 · 108 阅读 · 0 评论