设计模式 – 适配器模式(adapter pattern) 具体解释「建议收藏」

设计模式 – 适配器模式(adapter pattern) 具体解释

大家好,又见面了,我是全栈君。

适配器模式(adapter pattern) 详细解释


本文地址: http://blog.csdn.net/caroline_wendy


适配器模式(adapter pattern): 将一个类的接口, 转换成客户期望的还有一个接口. 适配器让原本不兼容的类能够合作无间.


适配器模式(adapter pattern)主要包含:

1. 被适配者接口(adaptee interface): 须要被适配的接口.

2. 适配器(adapter): 转换的类;

3. 目标接口(target interface): 须要转换成为的接口.

4. 客户(client): 详细使用的类.


详细方法:

1. 被适配者(adaptee interface)接口, 和实现接口详细的类.

/**
 * @time 2014年6月17日
 */
package adapter;

/**
 * @author C.L.Wang
 *
 */
public interface Turkey {
	public void gobble();
	public void fly();
}


/**
 * @time 2014年6月17日
 */
package adapter;

/**
 * @author C.L.Wang
 *
 */
public class WildTurkey implements Turkey {

	/* (non-Javadoc)
	 * @see adapter.Turkey#gobble()
	 */
	@Override
	public void gobble() {
		// TODO Auto-generated method stub
		System.out.println("Gobble gobble! ");
	}

	/* (non-Javadoc)
	 * @see adapter.Turkey#fly()
	 */
	@Override
	public void fly() {
		// TODO Auto-generated method stub
		System.out.println("I'm flying a short distance! ");
	}

}

2.
目标接口(target interface), 和实现接口详细的类.

/**
 * @time 2014年6月17日
 */
package adapter;

/**
 * @author C.L.Wang
 *
 */
public interface Duck {
	public void quack();
	public void fly();
}


/**
 * @time 2014年6月17日
 */
package adapter;

/**
 * @author C.L.Wang
 *
 */
public class MallardDuck implements Duck {

	/* (non-Javadoc)
	 * @see adapter.Duck#quack()
	 */
	@Override
	public void quack() {
		// TODO Auto-generated method stub
		System.out.println("Quack! ");
	}

	/* (non-Javadoc)
	 * @see adapter.Duck#fly()
	 */
	@Override
	public void fly() {
		// TODO Auto-generated method stub
		System.out.println("I'm flying! ");
	}

}

3.
适配器(adapter): 被适配者接口(adaptee interface) 转换 目标接口(target interface).

组合被适配者类接口, 实现目标类接口.

/**
 * @time 2014年6月17日
 */
package adapter;

/**
 * @author C.L.Wang
 *
 */
public class TurkeyAdapter implements Duck {

	Turkey turkey;
	
	public TurkeyAdapter (Turkey turkey) {
		this.turkey = turkey;
	}
	
	/* (non-Javadoc)
	 * @see adapter.Duck#quack()
	 */
	@Override
	public void quack() {
		// TODO Auto-generated method stub
		turkey.gobble();
	}

	/* (non-Javadoc)
	 * @see adapter.Duck#fly()
	 */
	@Override
	public void fly() {
		// TODO Auto-generated method stub
		for (int i=0; i<5; ++i) { //多次飞行
			turkey.fly(); 
		}
	}

}

4.
客户(client)方法须要使用目标类, 

把被适配者(adaptee)的详细类, 通过适配器(adapter), 转换为目标(target)类, 进行调用:

/**
 * @time 2014年6月17日
 */
package adapter;

/**
 * @author C.L.Wang
 *
 */
public class DuckTestDrive {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		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("\nThe Duck says ...");
		testDuck(duck);
		
		System.out.println("\nThe TurkeyAdapter says ...");
		testDuck(turkeyAdapter);
	}
	
	static void testDuck (Duck duck) {
		duck.quack();
		duck.fly();
	}

}

5.
输出.

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

The Duck says ...
Quack! 
I'm flying! 

The 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! 


设计模式 - 适配器模式(adapter pattern) 具体解释「建议收藏」



版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/116037.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号