首页 > 其他分享 >设计模式 之适配器模式

设计模式 之适配器模式

时间:2023-12-26 16:34:04浏览次数:29  
标签:turkey fly 适配器 flying 模式 public 设计模式 void

适配器模式

(适配器模式)

定义

==适配器模式==将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。

适配器模式充满着良好的OO设计原则:使用对象组合,以修改的接口包装被适配者。这种做法还有额外的优点,那就是被适配者的任何子类都可以搭配着适配器使用。

角色

  • Target(目标抽象类):把其他类转换为我们期望的接口,可以是一个抽象类或接口,也可以是具体类
  • Adaptee (装饰者):不改变接口,但加入责任
  • Adapter(适配者):将一个接口转成另一个接口

代码实现

现有鸭子和火鸡,需要让火鸡冒充鸭子

  1. 鸭子类

    public interface Duck {
        public void quack();
        public void fly();
    }
    
    public class MallardDuck implements Duck {
        @Override
        public void quack() {
            System.out.println("Quack");
        }
    
        @Override
        public void fly() {
            System.out.println("I'm flying");
        }
    }
    
  2. 火鸡类

    public interface Turkey {
        public void gobble();
        public void fly();
    }
    
    public class WildTurkey implements Turkey {
        @Override
        public void gobble() {
            System.out.println("Gobble gobble");
        }
    
        @Override
        public void fly() {
            System.out.println("I'm flying a short distance");
        }
    }
    
  3. 适配器

    public class TurkeyAdapter implements Duck {
        Turkey turkey;
        public TurkeyAdapter(Turkey turkey) {
            this.turkey = turkey;
        }
        @Override
        public void quack() {
            turkey.gobble();
        }
    
        @Override
        public void fly() {
            for (int i = 0; i < 5; i++) {
                turkey.fly();
            }
        }
    }
    
  4. 测试代码

    public class DuckTestDrive {
        public static void main(String[] args) {
            MallardDuck duck = new MallardDuck();
            WildTurkey turkey = new WildTurkey();
            Duck turkeyAdapter = new TurkeyAdapter(turkey);
    
            System.out.println("The Turkey says...");
            turkey.gobble();
            turkey.fly();
    
            System.out.println("\nThe Duck says...");
            testDuck(duck);
    
            System.out.println("\nThe TurkeyAdapter says...");
            testDuck(turkeyAdapter);
        }
    
        static void testDuck(Duck duck) {
            duck.quack();
            duck.fly();
        }
    }
    
  5. 输出结果

    The Turkey says...
    Gobble gobble
    I'm flying a short distance
    
    The Duck says...
    Quack
    I'm flying
    
    The TurkeyAdapter says...
    Gobble gobble
    I'm flying a short distance
    I'm flying a short distance
    I'm flying a short distance
    I'm flying a short distance
    I'm flying a short distance
    

标签:turkey,fly,适配器,flying,模式,public,设计模式,void
From: https://blog.51cto.com/u_16370137/8984762

相关文章

  • 调停者(中介)模式
    #include<iostream>#include<string>usingnamespacestd;classColleague;classMediator{public://对象在自身改变的情况下,通知Mediator进行变更//让我们Mediator这个总线,负责相应的同事对象的交互virtualvoidchanged(Colleague*pColleague)=0;......
  • vmware vmnat1和vmnat8在真机网络适配器中消失
    在真机的网络适配器中,发现只有两张网卡。缺少vmnat1和vmnat8一,查看虚拟网络编辑器是否连接二,如果没有连接,勾选连接就好了。三,如果连接了,真机网络适配器仍然只有两张网络适配器。1.右键此电脑,管理2.在左侧导航栏选择系统工具,设备管理器。在中间选择展开网络适配器。3.查......
  • Dart设计模式之代理模式
    dart设计模式之代理模式代理模式模式分析在代理模式(ProxyPattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。模式难点模式解决问题在直接访问对象时带来的问题,比如说:要访问的对象在远程的机......
  • Dart设计模式之享元模式
    dart设计模式之享元模式享元模式(Flyweight)模式分析享元模式(FlyweightPattern)主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式。享元模式尝试重用现有的同类对象,如果未找到匹配的对......
  • 设计模式之命令模式
    (命令模式)命令模式将方法调用封装起来,通过封装方法调用,将运算块包装成型。调用次运算的对象不需要关心事情是如何进行的,只要知道如何使用包装成型的方法来完成它就可以。应用于记录日志,或者重复使用这些封装来实现撤销。命令模式可将“动作的请求者”从“动作的执行者”对象中......
  • c# 责任链模式
    责任链模式是一种行为型设计模式,它允许多个对象按照链式结构处理请求,直到有对象能够处理请求为止。在C#中,责任链模式通常通过构建一个处理请求的链来实现。下面是一个简单的示例:首先,定义一个处理请求的抽象基类Handler,该类包含一个指向下一个处理者的引用:publicabstractclass......
  • C# 适配器模式
    适配器模式是一种结构型设计模式,它可以将一个或多个不兼容的接口适配成客户端期望的接口。在C#中,适配器模式通常采用类适配器或对象适配器的方式实现。下面是一个简单的类适配器示例:首先,定义一个客户端期望的目标接口,例如ICircle:publicinterfaceICircle{voidDraw(intx......
  • 迭代器模式揭秘:如何优雅应对数据遍历
    推荐语在这篇文章中,深入探讨了迭代器模式的核心原理和实战应用。通过清晰而有条理的解释,读者小伙伴可以领悟到迭代器模式在数据遍历和管理方面的强大能力。无论是初学者还是有经验的开发者,都能从这篇文章中获得实用的知识和技巧,进一步提升代码的可读性和可维护性。什么是迭代器模......
  • 线程池模式
    概念线程池模式(ThreadPoolPattern)是一种用于管理线程的设计模式。它通过预先创建一组线程,并维护一个任务队列,将需要执行的任务提交给线程池来执行,从而避免了频繁地创建和销毁线程的开销,提供了线程的重用和线程生命周期的管理。线程池模式的主要目标是提高线程的利用率、减少线......
  • 备忘录模式(Memento)
    #include<iostream>#include<string>usingnamespacestd;classOriginalWord;classMemento{public:Memento(stringstrWord):m_strWord(strWord){}private:friendclassOriginalWord;stringGetWords(){returnm_strWord......