首页 > 其他分享 >设计模式 bridge & decorator

设计模式 bridge & decorator

时间:2024-08-27 16:17:06浏览次数:8  
标签:桥接 bridge 颜色 color void Color 设计模式 public decorator

  •  目的

    • Decorator 模式:用于动态地给对象添加新的功能,而不改变其结构。它通过将对象放入一个装饰器类中,在运行时为对象添加额外的行为。这种模式通常用于需要对类的功能进行组合或扩展的场景。

    • Bridge 模式:用于将抽象部分与其实现部分分离,以便它们可以独立地变化。桥接模式的主要目的是解耦抽象和实现,从而使得它们可以独立扩展和变化。

  • Decorator 模式

    • 需要在不改变原有对象的情况下,动态地为对象添加新功能。
    • 希望通过组合不同的装饰器类来扩展对象的行为。
  • Bridge 模式

    • 抽象和实现部分需要独立变化,而不影响彼此。
    • 系统中有多个抽象和实现的组合,桥接模式可以减少类的数量。

4. 例子对比

  • Decorator:例如,假设你有一个简单的咖啡类,你希望能够动态地为咖啡添加不同的配料(如牛奶、糖、香草等),你可以使用装饰器模式来实现这个需求。

  • Bridge:在桥接模式的例子中,假设你有不同的图形类(如圆形、方形),并且你希望这些图形可以有不同的颜色实现(如红色、蓝色)。使用桥接模式可以将图形的形状和颜色实现解耦,以便你可以独立扩展形状和颜色的组合。

假设我们在开发一个绘图应用程序,需要绘制不同形状的对象,并且这些形状可以用不同的颜色进行渲染。我们可以使用桥接模式将形状和颜色分离,使得它们可以独立变化。

1. 创建颜色接口和具体实现

java // 颜色接口 public interface Color { void applyColor(); } // 具体颜色实现 public class RedColor implements Color { @Override public void applyColor() { System.out.println("Applying red color"); } } public class GreenColor implements Color { @Override public void applyColor() { System.out.println("Applying green color"); } }

2. 创建形状抽象类

java // 形状抽象类,使用组合的方式包含颜色 public abstract class Shape { protected Color color; public Shape(Color color) { this.color = color; } public abstract void draw(); }

3. 创建具体的形状实现

java public class Circle extends Shape { public Circle(Color color) { super(color); } @Override public void draw() { System.out.print("Drawing Circle in "); color.applyColor(); } } public class Square extends Shape { public Square(Color color) { super(color); } @Override public void draw() { System.out.print("Drawing Square in "); color.applyColor(); } }

4. 使用桥接模式

java public class BridgePatternDemo { public static void main(String[] args) { Shape redCircle = new Circle(new RedColor()); Shape greenSquare = new Square(new GreenColor()); redCircle.draw(); // Drawing Circle in Applying red color greenSquare.draw(); // Drawing Square in Applying green color } }

输出结果

scss Drawing Circle in Applying red color Drawing Square in Applying green color

总结

在这个示例中,我们使用了桥接模式将形状(Shape)与颜色(Color)的实现分离开来。通过这种方式,可以自由组合不同的形状和颜色,而无需创建大量的子类来支持每种可能的组合。这样,形状和颜色可以独立扩展,增加新的形状或颜色时只需创建新的具体类,而不需要更改现有代码,体现了开闭原则。

标签:桥接,bridge,颜色,color,void,Color,设计模式,public,decorator
From: https://www.cnblogs.com/spicy-food/p/18382924

相关文章

  • 设计模式--适配器模式
    适配器模式适配器模式(AdapterPattern)是一种结构型设计模式,它允许一个接口(通常是新的或现有的)与另一个不兼容的接口一起工作。适配器模式主要用于解决接口不匹配的问题,让原本由于接口不兼容而不能一起工作的类可以一起工作。下面,我将通过一个简单的例子来展示适配器模式的......
  • 【Kotlin设计模式】Kotlin实现外观模式
    前言外观模式(FacadePattern)是一种结构型设计模式,旨在为子系统中的一组接口提供一个统一的接口。外观模式定义了一个高层接口,使得这一子系统更加容易使用。它将复杂的子系统封装在一个简单的接口后面,从而降低了客户端的复杂性。实现我们以银行APP业务举个例子,其中包......
  • 行为型设计模式-模板方法(template method)模式
    通俗示例想象一下你正在制作一杯咖啡,制作咖啡的步骤大致相同,但有些步骤可以根据个人口味进行调整,比如选择咖啡豆、添加糖和奶等。在这种情况下,可以定义一个“制作咖啡”的模板,它规定了制作咖啡的基本步骤,但将某些步骤的具体实现留给子类完成。这就是模板方法模式的一个例子......
  • C++ 设计模式——享元模式
    C++设计模式——享元模式C++设计模式——享元模式1.主要组成成分2.享元模式内部状态3.享元模式外部状态4.逐步构建享元模式4.1抽象享元类定义4.2具体享元类实现4.3享元工厂类实现4.4主函数5.享元模式UML图享元模式UML图解析6.享元模式的优点7.享元模......
  • 设计模式基础
    1.面向对象设计的原则(七大原则)1.1单一职责(SPR:SingleResponsibilitiesPrinciple):一个类应只负责一个功能领域的相关职责,即只有一个使它变化的原因1.2开放闭合(OCP:Open-ClosePrinciple):软件实体应对扩展开发,对修改关闭,即实体可以扩展,但不能在原来的实体上修改1.3里氏代换(LSP:......
  • 设计模式2个黄鹂鸣翠柳-《分析模式》漫谈23
    DDD领域驱动设计批评文集做强化自测题获得“软件方法建模师”称号《软件方法》各章合集“AnalysisPatterns”的第一章有这么一句:The"GangofFour"bookhashadmuchmoreinfluenceinsoftwarepatternsthanAlexander'swork,and three outofthose four auth......
  • C++学习随笔——简单的单例设计模式实例
    点击查看代码#include<iostream>classSingleton{private://私有化构造函数,防止外部实例化Singleton(){std::cout<<"SingletonInstanceCreated!"<<std::endl;}//删除拷贝构造函数和赋值运算符,防止拷贝实例Singleton(constSin......
  • 第四章:行为型模式(11种)《Java设计模式宝典:从入门到精通》
      在进入第四章之前,我为大家准备了设计模式专栏的快速访问链接,方便大家随时查阅:《Java设计模式宝典:从入门到精通》专栏目录地址,点击我即可快速访问到所有设计模式的章节,不漏掉一处学习的知识 [点赞]等会儿兄弟们,这篇文章的干货真的是满满的!......
  • 【设计模式基础版】观察者模式
    观察者模式(ObserverPattern)是一种**行为型设计模式**,它定义了一种一对多的依赖关系,当一个对象的状态发生改变时,其所有依赖者(观察者)都会收到通知并自动更新。观察者模式常用于需要自动通知多个对象状态变化的场景,例如事件处理系统、订阅-发布系统等。所以也被称作“发布-订......
  • 设计模式——六大原则
    一、六大设计原则1.单一职责原则:应该有且仅有一个原因引起类的变更2.里氏替换原则:子类可替换父类。a)子类必须完全实现父类的方法b)子类可以有自己的个性c)子类实现父类方法时,入参可放大d)子类实现父类方法时,输出参数可缩小3.依赖倒置原则:高层模块......