【设计模式】—— 适配器模式Adapter

  模式意图

  如果已经有了一种类,而需要调用的接口却并不能通过这个类实现。因此,把这个现有的类,经过适配,转换成支持接口的类。

  换句话说,就是把一种现有的接口编程另一种可用的接口。

  模式结构

  【类的适配器】

  Target 目标接口

  Adaptee 现有的类

  Adapter 中间转换的类,即实现了目标接口,又继承了现有的类。

 1 package com.xingoo.test1;
 2 interface Target{
 3     public void operation1();
 4     public void operation2();
 5 }
 6 class Adaptee{
 7     public void operation1(){
 8         System.out.println("operation1");
 9     }
10 }
11 
12 class Adapter extends Adaptee implements Target{
13     public void operation2() {
14         System.out.println("operation2");
15     }
16 }
17 
18 public class test {
19     public static void main(String[] args){
20         Target tar = new Adapter();
21         tar.operation1();
22         tar.operation2();
23     }
24 }

  【对象的适配器】

  与上面不同的是,这次并不是直接继承现有的类,而是把现有的类,作为一个内部的对象,进行调用。

 1 package com.xingoo.test2;
 2 
 3 interface Target{
 4     public void operation1();
 5     public void operation2();
 6 }
 7 
 8 class Adaptee{
 9     public void operation1(){
10         System.out.println("operation1");
11     }
12 }
13 
14 class Adapter implements Target{
15     private Adaptee adaptee;
16     public Adapter(Adaptee adaptee){
17         this.adaptee = adaptee;
18     }
19     public void operation1() {
20         adaptee.operation1();
21     }
22 
23     public void operation2() {
24         System.out.println("operation2");
25     }
26     
27 }
28 public class test {
29     public static void main(String[] args){
30         Target tar = new Adapter(new Adaptee());
31         tar.operation1();
32         tar.operation2();
33     }
34 }

  使用场景

  1 想使用一个已经存在的类,但是它的接口并不符合要求

  2 想创建一个可以复用的类,这个类与其他的类可以协同工作

  3 想使用已经存在的子类,但是不可能对每个子类都匹配他们的接口。因此对象适配器可以适配它的父类接口。(这个没理解,以后慢慢琢磨)

  生活中的设计模式

  俗话说,窈窕淑女君子好逑,最近看跑男,十分迷恋Baby。

  但是,如果桃花运浅,身边只有凤姐,那么也不需要担心。

  只需要简单的化妆化妆,PS一下,美女凤姐,依然无可替代!

  虽然,没有AngleBaby,但是我们有凤姐,所以依然可以看到AngleBaby甜美的笑。

 1 package com.xingoo.test3;
 2 interface BeautifulGirl{
 3     public void Smiling();
 4 }
 5 class UglyGirl{
 6     public void Crying(){
 7         System.out.println("我在哭泣...");
 8     }
 9 }
10 class ApplyCosmetics implements BeautifulGirl{
11     private UglyGirl girl;
12     public ApplyCosmetics(UglyGirl girl){
13         this.girl = girl;
14     }
15     public void Smiling() {
16         girl.Crying();
17     }
18 }
19 public class test {
20     public static void main(String[] args){
21         BeautifulGirl girl = new ApplyCosmetics(new UglyGirl());
22         girl.Smiling();
23     }
24 }

  运行结果

我在哭泣...

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏web前端教室

javascript 红皮高程(11)

为革命,重学JS高程,预备...齐! 3.4.7 object哈,对象。找不着对象的同学们,建议看看JS高程,就能找着对象了。 ECMAScript中的对象,是...

2055
来自专栏noteless

设计模式之适配器模式 adapter 适配器模式分类概念角色详解 类适配器 对象适配器 接口适配器 双向适配器

可以看得出来,大陆和港版插座面板,都是作为电源的角色,他们的功能是相似的或者说相近的

4453
来自专栏青玉伏案

代码重构(二):类重构规则

在上篇博客《代码重构(一):函数重构规则(Swift版)》中,详细的介绍了函数的重构规则,其中主要包括:Extract Method, Inline Metho...

22510
来自专栏zaking's

js算法初窥04(算法模式01-递归)

1272
来自专栏Python数据科学

使用Pandas&NumPy进行数据清洗的6大常用方法

数据科学家花了大量的时间清洗数据集,并将这些数据转换为他们可以处理的格式。事实上,很多数据科学家声称开始获取和清洗数据的工作量要占整个工作的80%。

2592
来自专栏玄魂工作室

Python黑帽编程2.1 Python编程哲学

本节的内容有些趣味性,涉及到很多人为什么会选择Python,为什么会喜欢这门语言。我带大家膜拜下Python作者的Python之禅,然后再来了解下Python的...

3157
来自专栏嵌入式程序猿

sizeof应用的小陷阱

本篇笔记主要介绍在项目开发中,使用sizeof的一个要注意的地方。分别在8位机microchip PIC18F46K22, 16位机microchip ds...

3648
来自专栏spring源码深度学习

策略模式——运筹帷幄

三国情景再现: 诸葛亮在刘备去东吴招亲之前,特授予伴郎赵云三个锦囊,说是按天机拆开解决棘手问题。

1332
来自专栏Android开发指南

用最简单的例子说明设计模式(二)之模版方法、策略模式、组合模式、观察者模式

7457
来自专栏ImportSource

来来来,快来围观那个Kotlin

这个世界怎么了?我都惊了。 kotlin来了,就因为Google背书了一哈,你们就无条件的沸腾了。 这年头出来了所谓语言还少吗? ? 三天两头搞些新花样。 你们...

51711

扫码关注云+社区

领取腾讯云代金券