zoukankan      html  css  js  c++  java
  • JAVA设计模式学习笔记-适配器模式

    适配器模式:将一个类的接口转换成另一种接口.让原本接口不兼容的类可以兼容.
    从用户的角度看不到被适配者,是解耦的
    用户调用适配器转化出来的目标接口方法
    适配器再调用被适配者的相关接口方法
    用户收到反馈结果,感觉只是和目标接口交互

    package com.java.test.adaptermode.duck;
    
    public interface Duck {
    	public void quack();
    	public void fly();
    }
    
    
    package com.java.test.adaptermode.duck;
    
    public class GreenHeadDuck implements Duck {
    
    	@Override
    	public void quack() {
    		// TODO Auto-generated method stub
    		System.out.println(" Ga Ga");
    	}
    
    	@Override
    	public void fly() {
    		// TODO Auto-generated method stub
    		System.out.println("I am flying a long distance");
    	}
    
    }
    
    
    package com.java.test.adaptermode.turkey;
    
    public interface Turkey {
    
    	public void gobble();
    	public void fly();
    
    }
    
    
    package com.java.test.adaptermode.turkey;
    
    public class WildTurkey implements Turkey {
    
    	@Override
    	public void gobble() {
    		// TODO Auto-generated method stub
    		System.out.println(" Go Go");
    	}
    
    	@Override
    	public void fly() {
    		// TODO Auto-generated method stub
    		System.out.println("I am flying a short distance");
    	}
    
    }
    
    

    把鸭子适配成火鸡

    package com.java.test.adaptermode.adapter;
    
    import com.java.test.adaptermode.duck.Duck;
    import com.java.test.adaptermode.turkey.Turkey;
    
    public class TurkeyAdapter implements Duck {
    	private Turkey turkey;
    	
    	public TurkeyAdapter(Turkey turkey)
    	{
    		this.turkey=turkey;
    	}
    
    	@Override
    	public void quack() {
    		// TODO Auto-generated method stub
    		turkey.gobble();
    	}
    
    	@Override
    	public void fly() {
    		// TODO Auto-generated method stub
    		for(int i=0;i<6;i++)
    		{
    			turkey.fly();
    		}
    	}
    
    }
    
    

    测试类

    package com.java.test.adaptermode;
    
    import com.java.test.adaptermode.adapter.TurkeyAdapter;
    import com.java.test.adaptermode.adapter.TurkeyAdapter2;
    import com.java.test.adaptermode.duck.Duck;
    import com.java.test.adaptermode.duck.GreenHeadDuck;
    import com.java.test.adaptermode.turkey.WildTurkey;
    
    
    
    public class MainTest {
    	public static void main(String[] args) {
    		GreenHeadDuck duck=new GreenHeadDuck();
    		
    		WildTurkey turkey=new WildTurkey();
    		
    		Duck duck2turkeyAdapter=new TurkeyAdapter2();
    		turkey.gobble();
    		turkey.fly();
    		duck.quack();
    		duck.fly();
    		duck2turkeyAdapter.quack();
    		duck2turkeyAdapter.fly();
    		
    	
    	}
    }
    

    类适配器
    类适配器:通过多重继承目标接口和被适配者类方式来实现适配
    多重继承,其中继承的目标接口部分达到适配目的,而继承被适配者类的部分达
    到通过调用被适配者类里的方法来实现目标接口的功能

    对象适配器与类适配器差异

    对象适配器和类适配器使用了不同的方法实现适配,对象适配器使用组合,类适
    配器使用继承

    新适配器

    package com.java.test.adaptermode.adapter;
    
    import com.java.test.adaptermode.duck.Duck;
    import com.java.test.adaptermode.turkey.WildTurkey;
    
    public class TurkeyAdapter2 extends WildTurkey implements Duck {
    
    	@Override
    	public void quack() {
    		// TODO Auto-generated method stub
    		super.gobble();
    	}
    	@Override
    	public void fly() {
    		// TODO Auto-generated method stub
    		super.fly();
    		super.fly();
    		super.fly();
    	}
    }
    
    

    从枚举器到迭代器的适配

    package com.java.test.adaptermode.adapter;
    
    import java.util.Enumeration;
    import java.util.Iterator;
    
    public class EnumerationIterator implements Iterator<Object> {
    
    	private Enumeration enumeration;
    	
    	public EnumerationIterator(Enumeration enumeration)
    	{
    		 this.enumeration= enumeration;
    	}
    	
    	@Override
    	public boolean hasNext() {
    		// TODO Auto-generated method stub
    		return enumeration.hasMoreElements();
    	}
    
    	@Override
    	public Object next() {
    		// TODO Auto-generated method stub
    		return enumeration.nextElement();
    	}
    
    	@Override
    	public void remove() {
    		// TODO Auto-generated method stub
    		throw new UnsupportedOperationException();
    	}
    
    }
    
    

    装饰者模式与适配器模式的差别

  • 相关阅读:
    C++数据结构与算法(第4版) 完整版 高清pdf扫描版[193MB] 下载
    Streams AQ: enqueue blocked on low memory等待事件导致expdp导出缓慢问题
    Unity中使用 UGUI Toggle 和 Toggle Group 做单选列表
    unity UGUI动态滑动列表
    在Unity 中调用打印机来打印图片
    Unity3D中读取CSV文件
    unity 获取网络时间和本地时间
    win10右击无法新建文件,只能新建文件夹和快捷方式
    python笔记二、基础知识
    python笔记一、部分插件的作用及安装方法
  • 原文地址:https://www.cnblogs.com/kristse/p/adapter.html
Copyright © 2011-2022 走看看