内容简介:场景:水果店卖有橘子和苹果,橘子用橘子包装盒,苹果用苹果包装盒,顾客A来买橘子,但是没有橘子包装盒了,则用苹果包装盒暂时替代一下。测试代码如下:main方法里面,new一个橘子,再获取一个橘子包装实例。如今橘子包装没了,用苹果包装代替一下。
场景:水果店卖有橘子和苹果,橘子用橘子包装盒,苹果用苹果包装盒,顾客A来买橘子,但是没有橘子包装盒了,则用苹果包装盒暂时替代一下。
/**
* 桔子
*
*/
public class Orange implements Fruit {
private String name = "";
private int price = 70;
public Orange(String name,int price){
this.price = price;
this.name = name;
}
public void pack(OrangeBag bag){
bag.pack();
}
@Override
public int price() {
return price;
}
@Override
public void draw() {
System.out.print("砂糖桔");
}
public int accept(Visit visit){
return visit.sell(this);
}
public void setPrice(int price) {
this.price = price;
}
}
/**
* 桔子包装
*
*/
public class OrangeBag implements Bag {
@Override
public void pack() {
System.out.print("--桔子使用网兜包装");
}
}
/**
* 苹果包装
* Created by Peter on 10/9 009.
*/
public class AppleBag implements Bag {
@Override
public void pack() {
System.out.print("--苹果使用纸箱包装");
}
}
/**
* 水果接口
*/
public interface Fruit {
int price();
void draw();
int accept(Visit visit);
}
/**
* 包装接口
*/
public interface Bag {
void pack();
}
测试代码如下:main方法里面,new一个橘子,再获取一个橘子包装实例。
如今橘子包装没了,用苹果包装代替一下。
public class AdapterClient {
public static void main(String[] args){
Orange orange = new Orange("peter",100);
OrangeBag bag = getBag2();
orange.pack(bag);
}
/**
* 取桔子包装
* @return
*/
// private static OrangeBag getBag(){
// OrangeBag bag = new OrangeBag();
// return bag;
// }
private static OrangeBag getBag2(){
//准备用途苹果盒代替
AppleBag appleBag = new AppleBag();
//把苹果盒适配成桔子包装盒
OrangeBag orangeBag = new OrangeBagAdapter(appleBag);
return orangeBag;
}
}
/**
* 桔子包装适配器
*/
public class OrangeBagAdapter extends OrangeBag {
private AppleBag appleBag;
public OrangeBagAdapter(AppleBag appleBag){
this.appleBag = appleBag;
}
@Override
public void pack() {
appleBag.pack();
}
}
适配器模式结构图:
用法:
- 1.OrangeBagAdapter继承OrangeBag,同时组合AppleBag对象(引入成员变量),使OrangeBag和AppleBag产生关联。
- 2.当OrangeBag目标方法被调用时,OrangeBagAdapter转调AppleBag的对象方法
备注:OrangeBag和AppleBag都是已有类,是系统已有方法。整个过程只需要新增一个适配器类,去充当OrangeBag的实现。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 设计模式——订阅模式(观察者模式)
- 设计模式-简单工厂、工厂方法模式、抽象工厂模式
- java23种设计模式-门面模式(外观模式)
- 设计模式-享元设计模式
- Java 设计模式之工厂方法模式与抽象工厂模式
- JAVA设计模式之模板方法模式和建造者模式
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
RGB转16进制工具
RGB HEX 互转工具
URL 编码/解码
URL 编码/解码