适配器模式

简介:

         适配器模式的意图是将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

         可作为两个不兼容的接口之间的桥梁。例如两个插头想插在三个插头的插座上,需要转接头。

 

介绍:

角色
目标角色(Target)定义Client使用的与特定领域相关的接口。
被适配角色(Adaptee)定义一个已经存在并已经使用的接口,这个接口需要适配。
适配器角色(Adapter) 适配器模式的核心。它将对被适配Adaptee角色已有的接口转换为目标角色Target匹配的接口。对Adaptee的接口与Target接口进行适配。

1.对象适配器

对象适配器结构

 

特征
优点

1.“对象组合”方式符合松耦合。

2.在不更改现有代码的基础上复用现有类,符和“开闭原则”。

缺点1.如果需要适配器(Adapter)适配被适配器(Adaptee)的子类方法,需要实例化相应的子类。

 

2.类适配器

类适配器结构

 

特征
优点

1.无需实例化被适配器(Adaptee)的实例。

2.在不更改现有代码的基础上复用现有类,符和“开闭原则”。

缺点

1.采用了“多继承”,即适配器类同时继承接口和抽象类,带来了高耦合。

2.由于没有实例化被适配器(Adaptee),所以无法直接适配相应子类的功能。

 

使用:

本案例的意思是想画一个正方形(目标),但是只有画圆的工具,需要考虑圆规代替笔(被适配器),用转化的圆规画圆(适配器)。

    //对象适配器
    //目标角色
    public abstract class SquareDraw
    {
        public abstract void Draw();
    }

    //被适配角色
    public class CircleDraw
    {
        public void Convert()
        {
            //do something
        }
    }

    //适配角色
    public class SquareDrawAdapter : SquareDraw
    {
        private CircleDraw circleDraw = new CircleDraw();

        public override void Draw()
        {
            circleDraw.Convert();
            //do something
        }
    }
    //类适配器
    //目标角色
    public interface SquareDraw
    {
        void Draw();
    }

    //被适配角色
    public abstract class CircleDraw
    {
        public void Convert()
        {
            //do something
        }
    }

    //适配角色
    public class SquareDrawAdapter : CircleDraw, SquareDraw
    {
        public void Draw()
        {
            this.Convert();
            //do something
        }
    }
            //适配器模式调用-客户角色
            SquareDraw squareDraw = new SquareDrawAdapter();
            squareDraw.Draw();

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值