zoukankan      html  css  js  c++  java
  • java设计模式(八) 适配器模式

    【适配器模式】将一个类的接口,转换成客户期望的另外一个接口。适配器让原本接口不兼容的类可以合作无间。

    1,Duck接口

    package com.pattern.adapter;
    
    public interface Duck {
    	
    	public void quack();
    	public void fly();
    	
    }
    

    2,Duck实现类

    package com.pattern.adapter;
    
    public class MallardDuck implements Duck{
    
    	/** 
    	 * @see com.pattern.adapter.Duck#quack()
    	 */
    	@Override
    	public void quack() {
    		System.out.println("Quack");
    	}
    
    	/** 
    	 * @see com.pattern.adapter.Duck#fly()
    	 */
    	@Override
    	public void fly() {
    		System.out.println("I'm flying");
    	}
    	
    }
    

    3,Turkey接口

    package com.pattern.adapter;
    
    public interface Turkey {
    
    	public void gobble();
    	public void fly();
    	
    }
    


    4,Turkey实现类

    package com.pattern.adapter;
    
    public class WildTurkey implements Turkey{
    
    	/** 
    	 * @see com.pattern.adapter.Turkey#gobble()
    	 */
    	@Override
    	public void gobble() {
    		System.out.println("Gobble gobble");
    	}
    
    	/** 
    	 * @see com.pattern.adapter.Turkey#fly()
    	 */
    	@Override
    	public void fly() {
    		System.out.println("I'm flying a short distance");
    	}
    
    }
    


    5,适配器类

    package com.pattern.adapter;
    
    public class TurkeyAdapter implements Duck{
    	Turkey turkey;
    	
    	public TurkeyAdapter(Turkey turkey){
    		this.turkey = turkey;
    	}
    	
    	/** 
    	 * @see com.pattern.adapter.Duck#quack()
    	 */
    	@Override
    	public void quack() {
    		turkey.gobble();
    	}
    
    	/** 
    	 * @see com.pattern.adapter.Duck#fly()
    	 */
    	@Override
    	public void fly() {
    		for(int i=0;i<5;i++){
    			turkey.fly();
    		}
    	}
    
    }
    


    6,测试类

    package com.pattern.adapter;
    
    public class DuckTestDrive {
    	
    	public static void main(String[] args) {
    		MallardDuck duck = new MallardDuck();
    		
    		WildTurkey turkey = new WildTurkey();
    		Duck turkeyAdapter = new TurkeyAdapter(turkey);
    		
    		System.out.println("The Turkey says....");
    		turkey.gobble();
    		turkey.fly();
    		
    		System.out.println("
     The Duck says...");
    		testDuck(duck);
    		
    		System.out.println("
     TurkeyAdapter says...");
    		testDuck(turkeyAdapter);
    		
    	}
    	
    	static void testDuck(Duck duck){
    		duck.quack();
    		duck.fly();
    	}
    }

    输出结果为:

    The Turkey says....
    Gobble gobble
    I'm flying a short distance

     The Duck says...
    Quack
    I'm flying

     TurkeyAdapter says...
    Gobble gobble
    I'm flying a short distance
    I'm flying a short distance
    I'm flying a short distance
    I'm flying a short distance
    I'm flying a short distance

    类图为:



     

  • 相关阅读:
    Socket Client & Server
    2台整机,多线程运行测试时间不稳定
    去了一趟宝马铁西工厂,才知道工厂已经在数字孪生
    窗帘电机测试系统调试心得
    AntDesignBlazor 学习笔记
    简单粗暴的实现 Blazor Server 登录鉴权
    Blazor 子组件与父组件通过 ChildEvents 传递数据的方法
    EasyExcel 列 固定下拉选项的做法
    Java代码在数据库存取某些敏感字段的加解密做法
    nacos 使用【一】 创建一个属于自己的配置空间
  • 原文地址:https://www.cnblogs.com/mengjianzhou/p/5986812.html
Copyright © 2011-2022 走看看