设计模式之适配器模式

栏目: 后端 · 发布时间: 6年前

内容简介:场景:水果店卖有橘子和苹果,橘子用橘子包装盒,苹果用苹果包装盒,顾客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的实现。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

白话区块链

白话区块链

蒋勇 / 文延、嘉文 / 机械工业出版社 / 2017-10-1 / 59.00

由浅入深:从比特币开始,到区块链技术的骨骼(密码算法)和灵魂(共识算法),再到目前知名的区块链框架介绍,到最后从零构建一个微型区块链系统(微链),循序渐进。 多图多表:各种示例以及图表,通过流程图与示意图介绍比特币的源码编译、以太坊智能合约的开发部署、超级账本Fabric的配置使用、模拟比特币的微型区块链系统的设计实现等,形象而直观。 白话通俗:通过“村民账本记账”、“百花村选举记账”......一起来看看 《白话区块链》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

URL 编码/解码
URL 编码/解码

URL 编码/解码