《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中不能使用多重继承,所以不能实现类适配器)
相关推荐
郑州光合科技余经理3 分钟前
同城电商系统:库存变更怎么同步到订单
java·开发语言·前端·后端·uni-app·php·ai编程
无序的浪32 分钟前
测试博客-基于微服务的在线判题系统
java·spring cloud·docker·微服务·测试·在线判题
xfan_me1 小时前
维修保养记录精准版 API 对接实战指南
java·大数据·python
Keven-zhou1 小时前
不用先学前端框架,Java后端也能独立交付项目?飞算JavaAI实测
java
海上小飞龙1 小时前
改一个数,右边全得重算,这题怎么扛住两万次查询
java·c++·python
Leo.yuan1 小时前
从“看全局“到“评成效“:央国企穿透式监管六步链路,哪些厂商能真正闭环
java·大数据·人工智能
小马哥程序开发2 小时前
[点赞收藏免费领取 · 项目源码]57105基于Spring Boot的充电桩管理系统的设计与实现
java·spring boot·源码·课程设计·毕设·大作业·课设
九皇叔叔2 小时前
【09】SpringBoot4 MyBatisPlus 增删改查(CRUD)
java·mybatis·mybatisplus
白杨尚青3 小时前
C++入门篇(十):string(上)——认识string:构造与三大遍历(一条龙讲透operator[]、迭代器、auto、范围for)
java·开发语言·c++·笔记·stl
anew___3 小时前
《从零手写操作系统 (11):文件系统初探——initrd与VFS抽象层》
java·javascript·算法