美文网首页Java设计模式设计模式
第 2 章 Adapter 模式 -- 加个“适配器”以便复用

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

作者: oO反骨仔Oo | 来源:发表于2018-08-31 17:30 被阅读5次
    image.png

    Adapater 模式

    image.png

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

    使用继承的示例

    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();
            }
        }
    

    使用委托的示例

    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 角色的需求。

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

    image.png

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

    image.png

    要点 & 思路

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


    image.png

    相关模式

    Bridge 模式

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

    Decorator 模式

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

    《图解设计模式》

    相关文章

      网友评论

        本文标题:第 2 章 Adapter 模式 -- 加个“适配器”以便复用

        本文链接:https://www.haomeiwen.com/subject/nkkewftx.html