为了账号安全,请及时绑定邮箱和手机立即绑定

第 2 章 Adapter 模式 -- 加个“适配器”以便复用

标签:
设计模式

webp

image.png

Adapater 模式

webp

image.png

解析:用于填补“现有的程序”和“所需的程序”之间差异的设计模式。
两种类型:
1.类适配模式(使用继承的适配器)
2.对象适配器模式(使用委托的适配器)

使用继承的示例

webp

image.png

    /// <summary>
    /// 广告横幅
    /// </summary>
    public class Banner
    {
        private readonly string _str;        public Banner(string str)
        {
            _str = str;
        }        public void ShowWithParen()
        {
            Console.WriteLine($"({_str})");
        }        public void ShowWithAster()
        {
            Console.WriteLine($"*{_str}*");
        }
    }
    /// <summary>
    /// 打印
    /// </summary>
    public interface IPrint
    {        void PrintWeak();        void PrintStrong();
    }
    /// <summary>
    /// 打印的广告横幅
    /// </summary>
    public class PrintBanner : Banner, IPrint
    {
        public PrintBanner(string str) : base(str)
        {
        }

        public void PrintWeak()
        {
            ShowWithParen();
        }

        public void PrintStrong()
        {
            ShowWithAster();
        }
    }
    internal class Program
    {
        private static void Main(string[] args)
        {
            var p = new PrintBanner("hello");
            p.PrintWeak();
            p.PrintStrong();

            Console.Read();
        }
    }

使用委托的示例

webp

image.png

    /// <summary>
    /// 打印
    /// </summary>
    public abstract class Print
    {        public abstract void PrintWeak();        public abstract void PrintStrong();
    }
    /// <summary>
    /// 打印的广告横幅
    /// </summary>
    public class PrintBanner : Print
    {        private readonly Banner _banner;        public PrintBanner(Banner banner)
        {
            _banner = banner;
        }        public override void PrintWeak()
        {
            _banner.ShowWithParen();
        }        public override void PrintStrong()
        {
            _banner.ShowWithAster();
        }
    }

角色梳理

Target:对象

定义需要的方法。

Client:请求者

该角色负责使用 Target 定义的方法进行具体处理。

Adaptee:被适配

Adater:适配

使用 Adaptee 的方法满足 Target 角色的需求。

类适配器模式的类图(使用继承)

webp

image.png

对象适配器模式的类图(使用委托)

webp

image.png

要点 & 思路

1.不需要改变现有代码可以使现有代码适配于新接口;
2.版本迭代时兼容旧版本;


webp

image.png

相关模式

Bridge 模式

Adapter 模式用于连接接口不同的类,而 Bridge 模式则用于连接类的功能层次结构与实现层次结构。

Decorator 模式

Adapter 模式用于填补不同接口之间的缝隙,而 Decorator 模式则是在不改变接口的前提下增加功能。



作者:oO反骨仔Oo
链接:https://www.jianshu.com/p/e851a5cdb711


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消