《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中不能使用多重继承,所以不能实现类适配器)
相关推荐
山猪打不过家猪43 分钟前
ASP.NET Core Clean Architecture
java·数据库·asp.net
AllowM44 分钟前
【LeetCode Hot100】除自身以外数组的乘积|左右乘积列表,Java实现!图解+代码,小白也能秒懂!
java·算法·leetcode
不会Hello World的小苗1 小时前
Java——列表(List)
java·python·list
二十七剑2 小时前
jvm中各个参数的理解
java·jvm
东阳马生架构4 小时前
JUC并发—9.并发安全集合四
java·juc并发·并发安全的集合
计算机小白一个4 小时前
蓝桥杯 Java B 组之岛屿数量、二叉树路径和(区分DFS与回溯)
java·数据结构·算法·蓝桥杯
菠菠萝宝4 小时前
【Java八股文】10-数据结构与算法面试篇
java·开发语言·面试·红黑树·跳表·排序·lru
不会Hello World的小苗4 小时前
Java——链表(LinkedList)
java·开发语言·链表
workflower4 小时前
Prompt Engineering的重要性
大数据·人工智能·设计模式·prompt·软件工程·需求分析·ai编程
Allen Bright5 小时前
【Java基础-46.3】Java泛型通配符详解:解锁类型安全的灵活编程
java·开发语言