`
schy_hqh
  • 浏览: 558412 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

HeadFirst(七)Adapter 适配器设计模式

 
阅读更多

 

适配器模式-Adapter

将一个不兼容接口的对象包装起来,变成兼容的对象

 

 

 

 

 

外观/门面模式-Facade

将一群对象包装起来,以简化接口

当需要简化并统一一个很大的接口或者一群复杂的接口时,使用外观模式

外观将客户从一个复杂的子系统中解耦

实现一个外观,需要将子系统组合进外观中,然后将工作委托给子系统执行

可以为一个子系统实现一个以上的外观

 

装饰模式-Decorator

将一个对象包装起来以增加新的行为和责任

 

 

===============================================================

 

适配器模式示例

让火鸡变鸭子,以兼容现有接口的参数类型

 


 
 

鸭子的接口

package adapter.duck;

public interface Duck {
	public void quack();
	public void fly();
}

 

具体的鸭子

package adapter.duck;

public class MallardDuck implements Duck {

	@Override
	public void quack() {
		System.out.println("Quack");
	}

	@Override
	public void fly() {
		System.out.println("I'm flying");
	}

}

 

火鸡的接口

package adapter.turkey;

public interface Turkey {
	public void gobble();
	public void fly();
}

 

具体的火鸡

package adapter.turkey;

public class WildTurkey implements Turkey {

	@Override
	public void gobble() {
		System.out.println("Gobble");
	}

	@Override
	public void fly() {
		System.out.println("I'm flying a short distance");
	}

}

 

将火鸡伪装成鸭子

package adapter.turkey;

import adapter.duck.Duck;

/**
 * 适配器
 * 内部将火鸡伪装为鸭子
 */
public class TurkeyAdapter implements Duck {
	
	//被适配者
	Turkey turkey;
	
	public TurkeyAdapter(Turkey turkey) {
		this.turkey = turkey;
	}
	
	/**
	 * 委托被组合的对象完成任务
	 */
	@Override
	public void quack() {
		turkey.gobble();
	}

	@Override
	public void fly() {
		for(int i=0;i<5;i++) {
			//火鸡需要连续飞行5次才能抵上鸭子飞行一次
			turkey.fly();
		}
	}

}

 

测试:让火鸡也兼容以鸭子类型作为参数的接口

package test;

import adapter.duck.Duck;
import adapter.duck.MallardDuck;
import adapter.turkey.Turkey;
import adapter.turkey.TurkeyAdapter;
import adapter.turkey.WildTurkey;

public class AdapterTest {
	public static void main(String[] args) {
		
		Duck duck = new MallardDuck();
		
		Turkey turkey = new WildTurkey();
		Duck turkeyAdapter = new TurkeyAdapter(turkey);
		
		System.out.println("The Turkey says:");
		turkey.gobble();
		turkey.fly();
		
		System.out.println("\nThe Duck syas:");
		testDuck(duck);
		
		System.out.println("\nThe TurkeyAdapter syas:");
		testDuck(turkeyAdapter);//通过适配器,让火鸡变为鸭子去了
	}

	private static void testDuck(Duck duck) {
		duck.quack();
		duck.fly();
	}
}

 

 

===============================================================

 

Enumeration适配器



 

 

 

  • 大小: 20.1 KB
  • 大小: 30.5 KB
  • 大小: 71.1 KB
  • 大小: 39.1 KB
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    Head First 设计模式 (七) 适配器模式(Adapter pattern) C++实现

    适配器模式(Adapter pattern)是软件设计模式中的一种,其主要目的是解决系统间接口不兼容的问题,使得原本无法直接协作的类或者组件能够协同工作。在“Head First 设计模式”这本书中,适配器模式被深入浅出地讲解...

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

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

    Headfirst(七)适配器模式C++实现

    在"Headfirst第七章"中,可能会详细讲解这两种适配器模式的实现方式,并给出相应的C++代码示例。这些示例通常会展示如何将一个具有特定接口的类转换为符合另一种接口的需求。 UML类图是统一建模语言(Unified ...

    Headfirst设计模式中文高清PDF+附书源码

    《Headfirst设计模式》是一本深受开发者欢迎的设计模式学习书籍,尤其对于初学者而言,其独特的教学方式使得复杂的概念变得易于理解。这本书以其高清的中文版PDF格式提供,结合书中源码,为读者提供了深入实践的可能...

    Head First设计模式和HeadFirst in java 源码以及23种设计模式关系图

    总的来说,这个压缩包包含的资源可以帮助你深入理解设计模式,通过《HeadFirst设计模式》和《HeadFirst in Java》的源码,你可以学习到如何在实际项目中应用这些模式。而UML类图则提供了直观的视角,便于你把握设计...

    Head First Design Patterns 英文版 Head First设计模式

    《Head First Design Patterns》是一本深入浅出介绍设计模式的图书,由Eric Freeman、Elisabeth Freeman、Bert Bates和Kathy Sierra联合编写。本书结合认知科学原理和神经生物学研究,采用引导式教学方法,通过故事...

    head first 设计模式 高清完整版 pdf

    《Head First设计模式》是一本深受开发者喜爱的经典书籍,它以独特、生动的方式讲解了设计模式这一核心的软件工程概念。设计模式是经验丰富的开发者在解决常见问题时总结出的最佳实践,它们为软件设计提供了可复用的...

    HeadFirst设计模式PPT

    《HeadFirst设计模式》是一本深受开发者欢迎的书籍,它以独特、易理解的方式介绍了软件设计中的重要概念——设计模式。设计模式是经验丰富的开发者在解决常见问题时总结出的最佳实践,它们为软件设计提供了可复用的...

    HeadFirst设计模式源代码

    《HeadFirst设计模式源代码》是一本面向程序员的深度学习设计模式的书籍,它通过直观易懂的方式将复杂的概念转化为生动的图像和有趣的例子,帮助读者深入理解并掌握设计模式。设计模式是软件工程中的一种最佳实践,...

    head first 设计模式 PDF电子书下载

    《Head First 设计模式》是一本深受欢迎的设计模式书籍,由Eric Freeman、Elisabeth Robson、Bert Bates和Kathy Sierra合著。这本书以其独特的视觉呈现方式和易理解的教学方法,深受程序员们的喜爱,尤其是那些希望...

    HeadFirst设计模式英文版

    《Head First 设计模式》的英文版是一本面向初学者的设计模式入门书籍,它以幽默风趣的文风,深入浅出地介绍了软件设计中经常使用的设计模式。设计模式是一套被反复使用、多数人知晓、经过分类编目、代码设计经验的...

    headfirst设计模式

    《Head First设计模式》是一本深受开发者欢迎的设计模式教程,以其独特的视觉呈现方式和易于理解的语言,让初学者也能快速掌握设计模式的核心概念。这本书深入浅出地介绍了23种GOF(GoF,Gamma、Erich、Johnson、...

    Head First 设计模式 源代码

    《Head First 设计模式》是一本非常受欢迎的软件设计书籍,它以易懂且生动的方式介绍了23种经典的GOF设计模式。这本书的源代码包含了书中所有示例的实现,对于学习和理解设计模式有着极大的帮助。源代码的下载使得...

    HeadFirst设计模式JAVA版源码

    《HeadFirst设计模式JAVA版源码》是一份深入学习设计模式的重要资源,它基于流行的编程语言Java,旨在帮助开发者理解并应用设计模式于实际项目中。设计模式是软件工程中的重要概念,它代表了在特定场景下解决问题的...

    《Head.First设计模式》书中源代码(Java语言)

    《HeadFirst设计模式》是设计模式领域的一本经典著作,以其独特的教学方式和生动的插图深受初学者喜爱。这本书通过实例和互动式的学习方法,深入浅出地讲解了23种经典的设计模式。源代码作为理论知识的实践部分,...

    Head First设计模式官方原码

    《Head First设计模式》是一本深受开发者欢迎的设计模式学习书籍,以其独特的教学方式,通过丰富的图解和幽默的语言,帮助读者深入理解设计模式的核心概念。这本书的官方源码提供了书中所讲解的每个设计模式的实际...

    Head First设计模式 源代码

    《Head First设计模式》是软件开发领域的一本经典著作,主要介绍了面向对象设计中的各种模式。这本书通过生动、直观的方式,使读者能够更好地理解和应用设计模式。源代码是书中理论知识的具体实现,可以帮助读者深入...

    Head First设计模式 11个模式案例整合

    《Head First设计模式》是一本深受开发者欢迎的设计模式入门书籍,以其独特的视觉风格和易于理解的方式解释了软件设计中的核心概念。在这个“11个模式案例整合”中,作者通过实例化11个经典设计模式,帮助读者深入...

    Head First设计模式(含目录)

    《Head First设计模式》是一本深受程序员喜爱的书籍,它以独特的方式讲解了设计模式这一核心的编程概念。设计模式是软件开发中的经验总结,是解决常见问题的有效模板,可以帮助开发者编写可维护、可扩展、易理解的...

    Head First 设计模式 扫描版

    《Head First 设计模式》是软件开发领域内一本广受欢迎的书籍,由Eric Freeman、Elisabeth Robson、Bert Bates和Kathy Sierra四位作者共同撰写。这本书以其独特的视觉风格和易于理解的教学方法,深入浅出地介绍了...

Global site tag (gtag.js) - Google Analytics