《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中不能使用多重继承,所以不能实现类适配器)
相关推荐
qq_353233538922 分钟前
【原创】java+ssm+mysql校园疫情防控管理系统设计与实现
java·mvc·javaweb·ssm框架·bs·疫情防控
代码调试3 小时前
Springboot校园失物招领平台
java·spring boot
camellias_4 小时前
SpringBoot(二十三)SpringBoot集成JWT
java·spring boot·后端
tebukaopu1484 小时前
springboot如何获取控制层get和Post入参
java·spring boot·后端
昔我往昔4 小时前
SpringBoot 创建对象常见的几种方式
java·spring boot·后端
q567315234 小时前
用 PHP或Python加密字符串,用iOS解密
java·python·ios·缓存·php·命令模式
灭掉c与java4 小时前
第三章springboot数据访问
java·spring boot·后端
捕鲸叉5 小时前
怎样在软件设计中选择使用GOF设计模式
c++·设计模式
啊松同学5 小时前
【Java】设计模式——工厂模式
java·后端·设计模式
捕鲸叉5 小时前
C++设计模式和编程框架两种设计元素的比较与相互关系
开发语言·c++·设计模式