首页 > 其他分享 >重温设计模式 --- 桥接模式

重温设计模式 --- 桥接模式

时间:2023-07-11 13:22:44浏览次数:34  
标签:Draw 桥接 实现 --- color IColor 设计模式 public Fill

引言

桥接模式是一种结构型设计模式,它可以将一个大类或一组相关的类拆分成抽象和实现两个独立的层次结构,从而可以在两个层次结构中分别变化。桥接模式的核心思想是“尽可能将抽象部分和实现部分分离,使它们可以独立地变化”。这样可以使得系统更加灵活,易于扩展和维护。

在桥接模式中,有两个重要的角色:抽象部分和实现部分。抽象部分定义了一组抽象接口,它们与实现部分相互作用;实现部分则提供了这些接口的具体实现。

实现

  1. 定义抽象部分的接口或抽象类
public interface IShape
{
    void Draw();
}

2 .定义实现部分的接口或抽象类

public interface IColor
{
    void Fill();
}
  1. 实现实现部分的具体类
public class Red : IColor
{
    public void Fill()
    {
        Console.WriteLine("Fill with red color.");
    }
}

public class Blue : IColor
{
    public void Fill()
    {
        Console.WriteLine("Fill with blue color.");
    }
}

  1. 实现抽象部分的具体类,并在其中包含实现部分的对象
public abstract class Shape
{
    protected IColor color;

    public Shape(IColor color)
    {
        this.color = color;
    }

    public abstract void Draw();
}

public class Circle : Shape
{
    public Circle(IColor color) : base(color)
    {
    }

    public override void Draw()
    {
        Console.Write("Draw a circle. ");
        color.Fill();
    }
}

public class Rectangle : Shape
{
    public Rectangle(IColor color) : base(color)
    {
    }

    public override void Draw()
    {
        Console.Write("Draw a rectangle. ");
        color.Fill();
    }
}

  1. 客户端调用
IColor red = new Red();
IColor blue = new Blue();

Shape circle = new Circle(red);
circle.Draw();

Shape rectangle = new Rectangle(blue);
rectangle.Draw();
  1. 输出:
Draw a circle. Fill with red color.
Draw a rectangle. Fill with blue color.

在上面的代码中,我们定义了两个实现部分的具体类 RedBlue,它们实现了 IColor 接口。然后我们定义了两个抽象部分的具体类 CircleRectangle,并在它们的构造函数中传入一个 IColor 对象,实现了抽象部分和实现部分的解耦。最后,在客户端代码中使用抽象部分,通过传入不同的实现部分对象来实现不同的功能

结论

桥接模式的优点在于它可以让抽象部分和实现部分各自独立地变化,从而可以更加灵活地组合它们。此外,它还可以减少类之间的耦合度,提高代码的可维护性和可扩展性。

标签:Draw,桥接,实现,---,color,IColor,设计模式,public,Fill
From: https://www.cnblogs.com/pandefu/p/17536302.html

相关文章

  • Burp Suite Professional / Community 2023.7 (macOS, Linux, Windows) - Web 应用安
    BurpSuiteProfessional/Community2023.7(macOS,Linux,Windows)-Web应用安全、测试和扫描BurpSuiteProfessional,Test,find,andexploitvulnerabilities.请访问原文链接:https://sysin.org/blog/burp-suite-pro-2023/,查看最新版。原创作品,转载请保留出处。作者......
  • AppSpider Pro 7.4.053 for Windows - Web 应用程序安全测试
    AppSpiderPro7.4.053forWindows-Web应用程序安全测试Rapid7DynamicApplicationSecurityTesting(DAST)请访问原文链接:https://sysin.org/blog/appspider/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgappspider没有任何应用程序未经测试,没有未知风险......
  • Metasploit Pro 4.22.1-2023070501 (Linux, Windows) - 渗透测试框架
    MetasploitPro4.22.1-2023070501(Linux,Windows)-渗透测试框架Rapid7Penetrationtesting请访问原文链接:https://sysin.org/blog/metasploit-pro-4/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org世界上最广泛使用的渗透测试框架知识就是力量,尤其是当它被......
  • Tenable Nessus 10.5.3 (Unix, Linux, Windows) - #1 漏洞评估解决方案
    TenableNessus10.5.3(Unix,Linux,Windows)-#1漏洞评估解决方案发布Nessus试用版自动化安装程序,支持macOSVentura、RHEL9和Ubuntu22.04请访问原文链接:https://sysin.org/blog/nessus-10/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgNessus漏洞评......
  • Nexpose v6.6.203 for Linux & Windows - 漏洞扫描
    Nexposev6.6.203forLinux&Windows-漏洞扫描Rapid7VulnerabilityManagement,ReleaseJul05,2023请访问原文链接:https://sysin.org/blog/nexpose-6/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org您的本地漏洞扫描程序搜集通过实时覆盖整个网络,随......
  • 十二、ElasticSearch和Kibana安装及入门--谷粒商城
    ElasticSearch官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html官方中文:https://www.elastic.co/guide/cn/elasticsearch/guide/current/foreword_id.html社区中文:https://es.xiaoleilu.com/index.htmlhttp://doc.codingdict.com/elasti......
  • VMware vCenter Server 7.0 Update 3n 下载 - 集中管理 vSphere 环境
    VMwarevCenterServer7.0Update3n下载-集中管理vSphere环境请访问原文链接:https://sysin.org/blog/vmware-vcenter-7-u3/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgVMwarevCenterServer是一款高级服务器管理软件,提供了一个集中式平台来控制vSphere......
  • VMware ESXi 7.0 Update 3n - 领先的裸机 Hypervisor
    VMwareESXi7.0Update3n-领先的裸机HypervisorVMwareESXi7.0Update3nStandard&AllCustomImageforESXi7.0U3mInstallCD更新日期:FriJul07202310:50:00GMT+0800,阅读量:4518请访问原文链接:https://sysin.org/blog/vmware-esxi-7-u3/,查看最新版。原创作......
  • 洛谷 P6109 - [Ynoi2009] rprmq1
    首先将修改操作差分为\(l_1\)时刻给\([l_2,r_2]\)中的值\(+v\),\(r_1+1\)时刻给\([l_2,r_2]\)中的值\(-v\)。这样第\(i\)行的状态相当于执行\(1\simi\)时刻的操作后的状态。猫树分治,把一个询问挂在线段树上满足\(l\lel_1\lemid\ler_1\ler\)的区间\([l,r]\)......
  • XCTF-Final Flappy-Bird-Cheat题目复现
    引言这是一道有关Magisk模块的题目,虽然一直在用Magisk,但是对其模块作弊机制还不是很了解,之前比赛的时候没做出来(之前没恢复OpenSSL的符号,看起来很难看放弃了),有时间翻出来再看看。难点在于这道题目是采取静态分析的手段看的,暂时没找到什么办法对模块内的so文件进行动调和Hook,之后......