Java设计模式之适配器模式和外观模式

简介:

适配器模式

所谓适配器模式,将一个类的接口,转换为客户所期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。
适配器主要组成包括
目标接口 :客户端所希望得到的接口
适配器:这个主要就是将被适配器转换为目标接口,一般要实现目标接口,且包含被配饰器成员
被适配器:也就是用来改造的,提供给适配器来转换的,通常要将该被适配器绑定传入到适配器中,让适配器得以转换。
一般这种模式就是在不修改现有代码的情况下,将一个接口转换为另一个接口。它主要包含两种方式:
对象适配器:
这种就是在适配器中利用了组合来处理,将被适配器作为适配器的一个成员属性,而且适配器则就实现或者继承客户所需要的目标接口
代码实例:
假如有一个小狗和小猫的两个接口,现在客户需要小猫,可是只有小狗接口,则就可以利用适配器来转换。
这里只写出适配器代码:
package test;
public class AnimalAdapter  implements Cat{
private Dog dog;//被适配器
public AnimalAdapter(Dog dog)
{
this.dog=dog;
}

public void mimi() {
dog.wow();
}
public void run() {
dog.run();
}

public void sleep() {
dog.sleep();
}
}

外观模式
所谓外观模式,就是提供一个统一接口,用来访问子系统中的一群接口。它定义了一个高层接口,让子系统更容易使用。
外观模式并没有封装了子系统的类,外观只是提供了更简化的接口 ,它里面仍然包含着子系统中各个接口的对象,并且利用组合将子系统的所有接口来包含起来 。它不仅提供了一个简化接口,而且依然将系统完整的功能暴露出来。
代码实例
假设你要回家,回家进入屋里有各种各样的操作,此时就可以将这一系列操作看着一个子系统。可以简化该所有操作。
外观模式
package test;

import com.whut.command.Light;

public class Facede {
//等各种子系统的操作
private Light light;
private Door door;
private Window window;

public void goHome()
{
light.on();
door.open();
window.open();
}

}
适配器模式将一个或者多个类接口变成客户所期望的接口,并不是转换一个接口。
外观模式也可以只针对一个拥有复杂接口的类提供简化的接口。
适配器模式设计的意图主要就是让现有接口改变成符合顾客所期望的接口
外观模式的意图就是将一个复杂的子系统的所有接口简化,以提供一个便利方便的接口来给客户
设计模式原则:
最少知识原则,减少对象之间的交互,只留下几个“密友”。
要想遵循这个原则一般我们应该只调用属于以下范围的方法:
1 该对象的本身
2 被当做方法的参数而传递进来的对象
3 此方法所创建或实例化的任何对象
4 对象的任何组件,即该对象内部的所有成员变量或者方法
不要调用当某对象是调用其他方法后返回的结果。
两个模式总结:
1)当需要使用一个现有的类但是其接口并不符合你的需要时,可以用适配器模式
2)当需要简化并且统一一个很大的接口或者一群复杂的接口时候
3)适配器改变接口以使其符合客户的期望
4)外观将客户从一个复杂的子系统中解耦

5)适配器将一个对象包装起来以改变其接口。

装饰者将一个对象包装起来用来增加新的行为和责任。外观将一群对象包装起来以简化其接口。



本文转自 zhao_xiao_long 51CTO博客,原文链接:http://blog.51cto.com/computerdragon/1165985

相关文章
|
19天前
|
设计模式 JSON 前端开发
前端必须掌握的设计模式——适配器模式
适配器模式是一种结构型设计模式,用于使接口不兼容的对象能够相互合作。通过在客户端和系统之间引入一个“中间层”适配器,将不同类型的输入数据转换为系统能处理的标准格式,减轻系统的负担,提高扩展性和可维护性。例如,MacBook的扩展坞将多种接口(如HDMI、USB)转换为Type-C接口,实现多接口兼容。
|
2月前
|
设计模式 消息中间件 搜索推荐
Java 设计模式——观察者模式:从优衣库不使用新疆棉事件看系统的动态响应
【11月更文挑战第17天】观察者模式是一种行为设计模式,定义了一对多的依赖关系,使多个观察者对象能直接监听并响应某一主题对象的状态变化。本文介绍了观察者模式的基本概念、商业系统中的应用实例,如优衣库事件中各相关方的动态响应,以及模式的优势和实际系统设计中的应用建议,包括事件驱动架构和消息队列的使用。
|
2月前
|
设计模式 Java 数据库连接
Java编程中的设计模式:单例模式的深度剖析
【10月更文挑战第41天】本文深入探讨了Java中广泛使用的单例设计模式,旨在通过简明扼要的语言和实际示例,帮助读者理解其核心原理和应用。文章将介绍单例模式的重要性、实现方式以及在实际应用中如何优雅地处理多线程问题。
42 4
|
3月前
|
设计模式 Java 程序员
[Java]23种设计模式
本文介绍了设计模式的概念及其七大原则,强调了设计模式在提高代码重用性、可读性、可扩展性和可靠性方面的作用。文章还简要概述了23种设计模式,并提供了进一步学习的资源链接。
58 0
[Java]23种设计模式
|
2月前
|
设计模式 JavaScript Java
Java设计模式:建造者模式详解
建造者模式是一种创建型设计模式,通过将复杂对象的构建过程与表示分离,使得相同的构建过程可以创建不同的表示。本文详细介绍了建造者模式的原理、背景、应用场景及实际Demo,帮助读者更好地理解和应用这一模式。
|
3月前
|
设计模式 监控 算法
Java设计模式梳理:行为型模式(策略,观察者等)
本文详细介绍了Java设计模式中的行为型模式,包括策略模式、观察者模式、责任链模式、模板方法模式和状态模式。通过具体示例代码,深入浅出地讲解了每种模式的应用场景与实现方式。例如,策略模式通过定义一系列算法让客户端在运行时选择所需算法;观察者模式则让多个观察者对象同时监听某一个主题对象,实现松耦合的消息传递机制。此外,还探讨了这些模式与实际开发中的联系,帮助读者更好地理解和应用设计模式,提升代码质量。
Java设计模式梳理:行为型模式(策略,观察者等)
|
4月前
|
存储 设计模式 安全
Java设计模式-备忘录模式(23)
Java设计模式-备忘录模式(23)
|
4月前
|
设计模式 存储 缓存
Java设计模式 - 解释器模式(24)
Java设计模式 - 解释器模式(24)
|
3月前
|
设计模式 Java
Java设计模式
Java设计模式
41 0
|
3月前
|
设计模式 Java
Java设计模式之外观模式
这篇文章详细解释了Java设计模式之外观模式的原理及其应用场景,并通过具体代码示例展示了如何通过外观模式简化子系统的使用。
36 0