`
wangchao_17915566
  • 浏览: 169520 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

了解适配器模式

阅读更多

     客户端通过类的接口访问提供的服务,一般现有类可提供用户的所需功能,而有时不能满足用户的期望。例如有两个毫无关联的类组合在一起使用,要么就是修改各自的接口,但是在不修改各自接口的前提下,应该怎么做呢?使用Adapter模式,使得原本需要修改接口的才能在一起工作的两个类可以通过此模式不进行修改接口,在一起工作。

     举个例子,面包制作商可以制作面包,蛋糕制作商可以制作蛋糕,某工厂以前请了面包制作商只做面包,而现在还要制作蛋糕。

     传统方法 增加一个蛋糕制作的接口,并且在实现中增加制作蛋糕的实现。

public interface MakeFactory{
	String getCake();
	String getBread();
}

 实现:

public class MakeFactoryImpl implements MakeFactory{

	public String getBread() {
		// TODO Auto-generated method stub
		return null;
	}

	public String getCake() {
		// TODO Auto-generated method stub
		return null;
	}

}

 这样就ok了。

但是想想,以前他是做面包的,有做面包的一套体制,如果再把做蛋糕加进去,工序有可能会乱。并且无法工作。

这样我们可以通过Adapter模式。

   

/**
 * Adaptee 被适配器
 * */
public class MakeBread {
	public String getBread(){
		System.out.println("++++++bread++++");
		return "bread";
	};
}

 以前我只有一个面包房,现在我还要蛋糕房

public interface MakeFactory{
	String getCake();
	String getBread();
}

  

 最后看看如何通过适配器模式,将不相连的两个类配在一起工作。

/**
 * Adapter 适配器
 * */
public class MakeCake extends MakeBread implements MakeFactory {
	public String getCake() {
		System.out.println("++++++cake++++");
		return "cake";
	};
}

 

这样做,我们的MakeFactory工厂就可以有条不紊的进行制作。

我们测试一下

public class Client {
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		MakeCake m = new MakeCake();
		m.getCake();
		m.getBread();
	}
}

 

测试结果

++++++cake++++
++++++bread++++

 

从这里不难看出,此接口可以满足用户的需要。

分享到:
评论
7 楼 yunhaifeiwu 2008-12-08  
说明:在本回复中所有出现的语句都没调试过,如果有语法错误,望理解。

在我的认知世界中,适配器模式是最强悍的模式。

适配器模式,通俗说,大轮子套小轮子。

说白了:把一个类的实例,注入到另一个类中,而这个类的方法就调用前一个类的方法。
例: (非java语言,为了描述形象采用,类似java语法,希望 大家能看懂)

如果有这个类
 public Class ClassA.{ //这就是通俗说法中的小轮子
    public void methodA(){//其他语句 } 
}


则适配器模式中 ,ClassB 则如下定义了

public Class ClassB{ //这就是通俗说法中的大轮子
      public  ClassA aObj; //aObj是一个ClassA变量
      public void methodB() { 
          //其他语句
          aObj.mehtoidA;
          //其他语句
       } 
}



在使用ClassB 时,要先给aObj注入一个ClassA实例。
如下:
  ClassA a=new ClassA(); 
   ClassB b =new ClassB();
   b.aObj=a;
   b. methodB();

当然了,向ClassB 注入ClassA的实例时,方法多种多样。既可通过ClassB的构造方法,也可在ClassB用getter and setter方法注入,还可在methodB方法中通过参数注入  等等。


好处之一是: 当ClassA是第三方提供的类,我们根本就不可能修改其源代码,而此时我们既想想使用它提供的方法,又想适当改变,则适配器模式就用上了。

适配器模式,博大精深,我不想发表我自已的感悟了,免得又遇到很浑的牛人。 

再次强调,适配器模式的内涵,博大精深。就像道家的阴阳、哲学中的矛盾, 看似平凡无奇,实质上23中模式及其他模式,多半都能分解到适配器模式中来。不说了,不说了,设计模式与数据结构,重点在领悟其内涵。


6 楼 独孤求学 2008-12-08  
运行机制有点看不明白, 还望解释下
5 楼 wangchao_17915566 2008-12-02  
tou3921 写道

当初第一次看到时真的感觉蛮震撼的。。。。

人嘛,都是在不断学习中进步的,错了能改就好了,也同样感谢帮助和指导
4 楼 tou3921 2008-12-02  
当初第一次看到时真的感觉蛮震撼的。。。。
3 楼 quiii 2008-12-02  
- -! 娃 跟设计模式4磕了?
2 楼 wangchao_17915566 2008-12-01  
zhajie 写道

Atapter 错了吧 Adapter

谢谢了,
初学者,请见谅,哈哈
1 楼 zhajie 2008-12-01  
Atapter


错了吧

Adapter

相关推荐

    适配器模式源代码

    通过阅读和理解这个源代码,我们可以更深入地了解适配器模式的原理和应用,提升我们的设计能力,使我们在面对类似问题时能更从容地利用设计模式来优化代码结构和提高代码复用性。同时,这也是学习和实践面向对象设计...

    设计模式——适配器模式

    通过阅读博客文章《设计模式——适配器模式》(链接:https://wjy320.iteye.com/blog/2042323),我们可以深入了解适配器模式的实现细节,包括具体的代码示例以及在实际项目中的应用案例。这个博客可能会讨论如何在...

    适配器模式

    博客链接(https://ylxy3058.iteye.com/blog/2226113)可能提供了更深入的适配器模式的实践案例或源码分析,建议参考学习,以深入了解适配器模式的实现细节和应用场景。 至于"cygoattest"这个压缩包子文件的文件...

    C#设计模式—适配器模式应用实例

    首先,让我们了解适配器模式的基本组成部分: 1. **目标(Target)**:这是客户端需要调用的接口。在C#中,这通常是一个抽象类或接口。 2. **适配者(Adaptee)**:这是需要适配的旧接口或类,它可能是一个第三方库...

    适配器模式资料

    通过阅读文档,你可以了解适配器模式的基本原理和设计思想;通过查看代码示例,你可以学习如何在实践中实现适配器模式,包括类适配器和对象适配器的代码结构和用法。 总结一下,适配器模式是一种重要的设计模式,...

    .Net设计模式_适配器模式

    适配器模式是一种在软件工程中广泛使用的结构型设计模式,它的主要目的是为了让不兼容的接口之间能够进行通信。在.NET开发中,适配器模式扮演着重要角色,尤其是在处理不同系统、库或组件间的集成时。这个".Net设计...

    设计模式——适配器模式(adapter)

    在阅读文章《设计模式——适配器模式(adapter)》时,你可以期待了解到更多关于适配器模式的实战案例、优缺点分析以及如何在实际项目中有效利用这一模式来解决问题。同时,提供的`adapter`压缩包文件可能包含示例...

    设计模式之适配器模式与外观模式demo

    适配器模式和外观模式是两种非常重要的设计模式,它们在实际项目中有着广泛的应用。本资源提供了一个关于这两种模式的实战示例,帮助我们更好地理解和应用它们。 适配器模式(Adapter Pattern)的主要目的是将两个...

    iOS适配器模式.zip

    [刚刚上传的demo运行有问题,重新传了个新的],这个的一个iOS的适配器模式的实例代码,目前就是一个简单的demo,后期还会更新适配器在 MVC,MVP,MVVM中的使用,demo对应着简书:https://www.jianshu.com/p/e2ebcf19098f,...

    设计模式实验报告-适配器模式.docx

    通过本实验,我们深入了解了适配器模式的概念及其两种实现方式——对象适配器和类适配器。实验中,我们不仅学习了如何设计和实现适配器,还通过具体的示例理解了适配器模式的实际应用价值。这种模式能够有效地提升...

    设计模式:结构型-适配器模式

    适配器模式可以分为三种类型:类适配器模式、对象适配器模式和接口适配器模式。 类适配器模式中,适配器类通过继承适配者类并实现目标接口来实现适配。例如,在手机充电的例子中,充电器(VoltageAdapter)继承了...

    设计模式--适配器模式

    适配器模式是一种常用的设计模式,它在软件工程中扮演着重要的角色,特别是在解决系统间的兼容性和接口不匹配问题时。适配器模式的核心思想是将一个类的接口转换成客户希望的另一个接口,使原本由于接口不兼容而无法...

    适配器模式DEMO

    通过这个DEMO,开发者不仅可以学习适配器模式的基本概念,还能了解到如何在实际编码中应用这一模式,从而提升软件设计的灵活性和可维护性。在分析和理解DEMO的过程中,建议关注以下几个关键点: 1. 适配器类的结构...

    设计模式适配器模式讲解

    在深入讨论适配器模式之前,我们首先需要了解几个基本的概念: - **目标角色(Target)**:这是客户端期望的接口。所有适配后的对象都应该实现这个接口。 - **源角色(Adaptee)**:需要被适配的类。它的接口不符合...

    适配器模式和桥接模式共26页.pdf.zip

    适配器模式与桥接模式是软件设计模式中的两种重要结构型模式,它们在软件开发中起到了关键的作用,帮助开发者解决系统组件之间的兼容性问题和解耦问题。这两种模式都是为了实现不同接口间的协同工作,但各有其独特的...

    [结构型模式] head first 设计模式之适配器模式(Adapter)

    在阅读《Head First设计模式》中的适配器模式章节时,你会了解到如何根据具体需求选择适当的适配器类型,以及如何有效地实现适配器以达到预期的效果。通过案例分析和实际代码示例,书中的讲解会让你对适配器模式有...

    通用数据适配器的用法

    通过分析这个示例,我们可以更清晰地了解适配器模式在实际项目中的应用。 适配器模式在Java、C#、Python等编程语言中都有广泛的应用。在Java中,可以使用接口或继承来实现适配器;在C#中,可以使用接口和委托;而在...

Global site tag (gtag.js) - Google Analytics