Adapter Pattern
问题:
有一只狼,它披上了羊皮,从外表上看,根本看不出来它是一只狼,只有当它跑和叫的时候,才能区分它!
Java实现
package com.pattern.adapter; public interface Sheep { public void run();//羊叫 public void bark();//羊跑 }
package com.pattern.adapter; public class SmallSheep implements Sheep{ @Override public void run() { System.out.println("小羊跑..."); } @Override public void bark() { System.out.println("小羊叫..."); } }
package com.pattern.adapter; public class Wolf { public void run(){ System.out.println("狼跑...."); } public void bark(){ System.out.println("狼叫...."); } }
package com.pattern.adapter; public class SheepAdapter implements Sheep{ private Wolf wolf; public SheepAdapter(Wolf wolf){ this.wolf=wolf; } @Override public void run() { wolf.run(); } @Override public void bark() { wolf.bark(); } }
package com.pattern.adapter; public class Test { public static void main(String[] args) { Wolf wolf=new Wolf();//有一只狼 Sheep wolfSheep=new SheepAdapter(wolf);//它穿上了羊皮,变成了披着羊皮的狼 wolfSheep.run();//狼跑.... wolfSheep.bark();//狼叫.... Sheep smallSheep=new SmallSheep(); smallSheep.run();//小羊跑... smallSheep.bark();//小羊叫... } }
适配器模式的过程
狼(wolf)穿上了羊皮(SheepAdapter)变成了穿着羊皮的狼,外观上看已经是一只羊了,但本质不是。
适配器模式与装饰者模式的区别
- 他们的结构几乎是一样的,只是他们的作用不一样
- 适配器模式将一个对象包装起来改变其接口(狼变成羊了,虽然是假的)
- 装饰者模式是把一个对象包装起来增加其功能或特点(蛋糕变成草莓蛋糕了,还是蛋糕嘛)