天天看点

head first-----------adpter pattern

head first-----------------深入浅出适配器模式

     适配器模式:将一个类的接口,转换成客户想要的另外一个接口,适配器然原本接口不兼容的类可以合作无间。从而可以不用更改旧的代码就可以适应新的业务需求

     package com.clark.adapterpattern.abstractclass;

/**

 * Duck 接口

 * @author Administrator

 *

 */

public interface Duck {

public void quack();//呱呱叫方法

public void fly();//鸭子会飞

}

package com.clark.adapterpattern.abstractclass;

 * 火鸡接口

public interface Turkey {

public void gobble();//火鸡嘎嘎叫

public void fly();//火鸡也会飞,只是飞得短

package com.clark.adapterpattern;

import com.clark.adapterpattern.abstractclass.Duck;

 * 绿头鸭

public class MallardDuck implements Duck {

@Override

public void quack() {

System.out.println("Quack.......");

public void fly() {

System.out.println("fly remote distance.......");

import com.clark.adapterpattern.abstractclass.Turkey;

 * 火鸡的具体实现

public class WildTurkey implements Turkey {

public void gobble() {

System.out.println("Gobble gobble.....");

System.out.println("fly short distance.....");

import java.util.Random;

 * 鸭子转换成火鸡的适配器

public class DuckAdpter implements Turkey {

public Duck duck;

public Random rand;

public DuckAdpter(Duck duck){

this.duck=duck;

rand=new Random();

this.duck.quack();

if(rand.nextInt(5)==0){

this.duck.fly();

 * 火鸡转化成鸭子的适配器

public class TurkeyAdpter implements Duck {

public Turkey turkey;

public TurkeyAdpter(Turkey turkey){

this.turkey=turkey;

this.turkey.gobble();

//由于火鸡飞得距离短,所以让它多飞几次

for (int i = 0; i < 3; i++) {

this.turkey.fly();

 * Test CLASS

public class TestDrive {

public static void main(String[] args) {

//先创建一只鸭子和一只火鸡

MallardDuck duck=new MallardDuck();

WildTurkey turkey=new WildTurkey();

//然后将火鸡包装进火鸡适配器,鸭子装到鸭子适配器

Duck turkryAdpter=new TurkeyAdpter(turkey);

Turkey DuckAdpter=new DuckAdpter(duck);

//打印原来火鸡和鸭子的行为

System.out.println("The Turkey says.....");

turkey.gobble();

turkey.fly();

System.out.println("\nThe Duck says.....");

testDuck(duck);

//使用适配器之后输出的行为

System.out.println("\nThe turkeyadpter says....");

testDuck(turkryAdpter);

System.out.println("\nThe turkeyAdpter says....");

testTurkey(turkey);

public static void testDuck(Duck duck){

duck.quack();

duck.fly();

public static void testTurkey(Turkey turkey){

//=============Test result================

The Turkey says.....

Gobble gobble.....

fly short distance.....

The Duck says.....

Quack.......

fly remote distance.......

The turkeyadpter says....

The turkeyAdpter says....

ide