设计模式之适配器模式

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

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


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

查看所有标签

猜你喜欢:

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

程序员之禅

程序员之禅

[德] Christian Grobmeier / 荣耀、朱艳 / 人民邮电出版社 / 2015-8 / 39.00元

禅是一种生活态度和生活方式。程序员是一份特别辛苦的职业,也是一个承受各种压力的群体。在物欲横流的今天,禅对于程序员有着特殊的意义和价值。 本书的作者是一名德国程序员老兵,深谙程序员的喜怒哀乐。他曾经发表了一篇题为“程序员之禅的十条法则”的博客文章,引发众多程序员热烈的讨论和强烈的共鸣。本书共10章,结合程序员日常生活和工作的方方面面,作者通过对禅的知识、理解、体验、思考和感悟,提出很多中肯的......一起来看看 《程序员之禅》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具