《HeadFirst设计模式(第二版)》第七章代码——适配器模式

代码文件目录:
Example1:
Duck
java 复制代码
package Chapter7_AdapterAndFacadePattern.Adapter.Example1;

/**
 * @Author 竹心
 * @Date 2023/8/7
 **/

public interface Duck {
    public void quack();
    public void fly();
}
DuckTestDrive
java 复制代码
package Chapter7_AdapterAndFacadePattern.Adapter.Example1;

/**
 * @Author 竹心
 * @Date 2023/8/7
 **/

public class DuckTestDrive {
    public static void main(String[] args) {
        Duck duck = new MallardDuck();

        Turkey turkey = new WildTurkey();
        Duck duckAdapter = new TurkeyAdapter(turkey);

        System.out.println("\nTurkeys say:...");
        turkey.gobble();
        turkey.fly();

        System.out.println("\nDucks say:...");
        testDuck(duck);

        System.out.println("\nTurkeyAdapters say:...");
        testDuck(duckAdapter);
    }

    static void testDuck(Duck duck){
        duck.quack();
        duck.fly();
    }
}
MallardDuck
java 复制代码
package Chapter7_AdapterAndFacadePattern.Adapter.Example1;

/**
 * @Author 竹心
 * @Date 2023/8/7
 **/

public class MallardDuck implements Duck{
    @Override
    public void quack() {
        System.out.println("Quack!");
    }

    @Override
    public void fly() {
        System.out.println("I'm flying!");
    }
}
Turkey
java 复制代码
package Chapter7_AdapterAndFacadePattern.Adapter.Example1;

/**
 * @Author 竹心
 * @Date 2023/8/7
 **/

public interface Turkey {
    public void gobble();
    public void fly();
}
TurkeyAdapter
java 复制代码
package Chapter7_AdapterAndFacadePattern.Adapter.Example1;

/**
 * @Author 竹心
 * @Date 2023/8/7
 **/

public class TurkeyAdapter implements Duck{
    Turkey turkey;

    public TurkeyAdapter(Turkey turkey){
        this.turkey = turkey;
    }

    @Override
    public void quack() {
        this.turkey.gobble();
    }

    @Override
    public void fly() {
        for(int i = 0;i<5;++i){
            this.turkey.fly();
        }
    }
}
WildTurkey
java 复制代码
package Chapter7_AdapterAndFacadePattern.Adapter.Example1;

/**
 * @Author 竹心
 * @Date 2023/8/7
 **/

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!");
    }
}
Example2:
EnumerationIterator
java 复制代码
package Chapter7_AdapterAndFacadePattern.Adapter.Example2;

import java.util.Enumeration;
import java.util.Iterator;

/**
 * @Author 竹心
 * @Date 2023/8/7
 **/

public class EnumerationIterator implements Iterator<Object> {
    Enumeration<?> enumeration;

    public EnumerationIterator(Enumeration<?> enumeration){
        this.enumeration = enumeration;
    }

    public boolean hasNext(){
        return this.enumeration.hasMoreElements();
    }

    public Object next(){
        return this.enumeration.nextElement();
    }

    public void remove(){
        throw new UnsupportedOperationException();
        //这里的remove()方法是无法实现的,所以只能抛出一个异常,属于是适配器的缺点了
    }
}
IteratorEnumeration
java 复制代码
package Chapter7_AdapterAndFacadePattern.Adapter.Example2;

import java.util.Enumeration;
import java.util.Iterator;

/**
 * @Author 竹心
 * @Date 2023/8/7
 **/

public class IteratorEnumeration implements Enumeration<Object> {
    public Iterator<?> iterator;

    public IteratorEnumeration(Iterator<?> iterator){
        this.iterator = iterator;
    }

    @Override
    public boolean hasMoreElements() {
        return this.iterator.hasNext();
    }

    @Override
    public Object nextElement() {
        return this.iterator.next();
    }
}
notes.txt
java 复制代码
适配器模式:
    将一个类的接口转换成客户期望的另外一个接口。适配器让原本接口不兼容的类可以合作

对象和类适配器:
    前者主要使用组合,后者使用继承(JAVA中不能使用多重继承,所以不能实现类适配器)
相关推荐
Overt0p25 分钟前
抽奖系统(4)
java·spring boot·tomcat
想做后端的小C2 小时前
Java:接口回调
java·开发语言·接口回调
爱学习的小可爱卢2 小时前
JavaEE进阶——Spring核心设计模式深度剖析
java·spring·设计模式
毕设源码-钟学长2 小时前
【开题答辩全过程】以 个性化电影推荐网站的设计与实现为例,包含答辩的问题和答案
java·spring boot
C++业余爱好者2 小时前
Power Job 快速搭建 及通信机制介绍
java
qq_2704900963 小时前
SpringBoot药品管理系统设计实现
java·spring boot·后端
、BeYourself3 小时前
SpringAI-ChatClient Fluent API 详解
java·后端·springai
星辰_mya3 小时前
reids哨兵集群与选主
java·开发语言
BD_Marathon3 小时前
SpringBoot快速入门
java·spring boot·后端
期待のcode3 小时前
Java的多态
java·开发语言