设计模式之Adapter设计模式
这个设计模式是我这两天刚学的,这儿算是我的读书笔记发布出来是供大家一起学习,后面有我自己的感悟,下面是我网上整理的
以下情况使用适配器模式
• 你想使用一个已经存在的类,而它的接口不符合你的需求。
• 你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作。
• (仅适用于对象Adapter)你想使用一些已经存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口。对象适配器可以适配它的父类接口。
其实现方式主要有两种:
类适配器
对象适配器
其中:
• Target
— 定义Client使用的与特定领域相关的接口。
• Client
— 与符合Ta rg e t接口的对象协同。
• Adaptee
— 定义一个已经存在的接口,这个接口需要适配。
• Adapter
— 对Adaptee的接口与Target接口进行适配
具体的实现代码如下:
类适配器
- package com.visionsky.DesignPattern;
- interface Target {
- void Request();
- }
- class Adaptee {
- void SpecificRequst() {
- System.out.println("Adaptee's SpecificRequst");
- }
- }
- class Adapter extends Adaptee implements Target
- {
- @Override
- public void Request() {
- System.out.println("Adapter's Request");
- super.SpecificRequst();
- }
- }
- public class AdapterDemo {
- /**
- * @param args
- */
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- Target t=new Adapter();
- t.Request();
- }
- }
- //我的点评:类适配器存在不灵活的地方因为他为了实现Adaptee 里的特殊需求而使用了继承,我们知道继承在OO里其实破坏了类的封装性,这里如果被继承的类Adaptee 改动一下那么Adapter类也会随之改变这就破坏了OO里的原则破坏 了类的封装性
- //而如果使用下面的对象适配器的话就不会出现这个问题,上面是完全写死了的一种适配器不灵活,而下面你其实也可以通过传入一个你需要适配的类型参数(使用泛T)如Adaptee 的类型然后使用反射动态创建出该类型的实例,使用现在流行的T4模板还可以创建出多种不同需求的适配器类型。
对象适配器
- package com.visionsky.DesignPattern;
- interface Target {
- void Request();
- }
- class Adaptee {
- void SpecificRequst() {
- System.out.println("Adaptee's SpecificRequst");
- }
- }
- class Adapter implements Target
- {
- private Adaptee adaptee;
- public Adapter()
- {
- this.adaptee=new Adaptee();
- }
- @Override
- public void Request() {
- System.out.println("Adapter's Request");
- adaptee.SpecificRequst();
- }
- }
- public class AdapterDemo {
- /**
- * @param args
- */
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- Target t=new Adapter();
- t.Request();
- }
- }
生活中的例子:
在生活中最简单的例子就是电源适配器,如手机适配器,我们的家用电源是220V的,但是,对于手机来说,根本大不了这么多,所以,在这种情况下,需要电源适配器来为我们提供适合手机的电压。
- package com.visionsky.DesignPattern;
- public class AdaterDemoInLife {
- /**
- * @param args
- */
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- MobilePowerAdapter mpa=new MobilePowerAdapter();
- mpa.GetPower10V();
- }
- }
- interface ITarget {
- int GetPower10V();
- }
- class Power {
- int GetPower220V() {
- return 220;
- }
- }
- class MobilePowerAdapter implements ITarget
- {
- private Power power;
- public MobilePowerAdapter( ) {
- this.power = new Power();
- }
- @Override
- public int GetPower10V() {
- // TODO Auto-generated method stub
- power.GetPower220V();
- //将220v转变成10v,具体做法就不写了, 大家明白就行
- return 10;
- }
- }
本文出自 “学习笔记” 博客,请务必保留此出处http://visionsky.blog.51cto.com/733317/384607
更多 0
|
0人
|
了这篇文章 |
转载于:https://www.cnblogs.com/kexb/p/3666334.html
设计模式之Adapter设计模式相关推荐
- 结构设计模式 - 装饰器设计模式
结构设计模式 - 装饰设计模式 装饰器设计模式用于在运行时修改对象的功能.同时,同一类的其他实例不会受此影响,因此单个对象将获得已修改的行为.装饰器设计模式是结构设计模式之一(如Adapter Pat ...
- javascript设计模式研究学习-设计模式类别
编写易于维护的代码,其中一个最重要的方面是能够找到代码重复出现的主体并优化它们.这也是设计模式的有价值的地方. 设计模式类别: 一.创建型设计模式 创建型设计模式划分专注于处理对象创建机制,以适合给定 ...
- java 设计模式 示例_Java设计模式–示例教程
java 设计模式 示例 Design Patterns are very popular among software developers. A design pattern is a well- ...
- 备战面试日记(3.3) - (设计模式.23种设计模式之结构型模式)
本人本科毕业,21届毕业生,一年工作经验,简历专业技能如下,现根据简历,并根据所学知识复习准备面试. 记录日期:2022.1.9 大部分知识点只做大致介绍,具体内容根据推荐博文链接进行详细复习. 文章 ...
- 备战面试日记(3.2) - (设计模式.23种设计模式之创建型模式)
本人本科毕业,21届毕业生,一年工作经验,简历专业技能如下,现根据简历,并根据所学知识复习准备面试. 记录日期:2022.1.6 大部分知识点只做大致介绍,具体内容根据推荐博文链接进行详细复习. 文章 ...
- 备战面试日记(3.4) - (设计模式.23种设计模式之行为型模式)
本人本科毕业,21届毕业生,一年工作经验,简历专业技能如下,现根据简历,并根据所学知识复习准备面试. 记录日期:2022.1.12 大部分知识点只做大致介绍,具体内容根据推荐博文链接进行详细复习. 文 ...
- 23种设计模式——结构型设计模式(7种)
目录 ☞ 23 种设计模式--创建型设计模式(5种) ☞ 23 种设计模式--结构型设计模式(7种) ☞ 23 种设计模式--行为型设计模式(11种) 3. 结构型设计模式 结构型模式描述如何将类或对 ...
- 设计模式学习1:设计模式简述和设计模式原则
设计模式简述 什么是设计模式? 软件工程中,设计模式(design pattern)是对软件设计中普遍存在(反复出现)的各种问题,所提出的解决方案. 设计模式的目的: 代码高可用(相同作用的代码能重复 ...
- java api中的设计模式_Java API 设计模式之策略(Strategy)
策略设计模式与状态设计模式相类似.我们提到过,状态设计模式包含一个状态对象,该对象封装一个上下文对象的状态.策略设计模式包含一个策略对象.该对象与状态设计模式的状态对象相类似.它们之间的关键不同在于: ...
最新文章
- 骆驼iptv_骆驼路线的主/从故障转移
- java两个函数名字相同_为什么C不允许两个具有相同名称的函数/类模板,只有非类型模板参数(整数类型)的类型不同?...
- dice系数什么意思_轮胎上的数字和字母是什么意思 轮胎上的红点黄点是什么意思...
- 【渝粤题库】国家开放大学2021春3608矿井水害防治题目
- python连接oracle数据库_深入理解Python3.6连接Oracle数据库
- fs react 使用 保存文件_入门TypeScript编写React
- 远程计算机 函数不支持,win7远程桌面连接提示要求的函数不受支持怎么办
- 求解一元一次方程C语言,问一道算法题目(解一元一次方程的问题)
- TensorFlow实战3——TensorFlow实现CNN
- Java语言概述及常用DOS命令
- 随手记_科研攻略_好的idea的产生
- 应用SqlParameter防止注入式攻击,打开主窗体关闭登录窗体
- # java 核心技术卷1 (原书第11版)通读 第一章:java的基本程序设计结构
- Docker 配置 nvidia-docker 和 pytorch 的一些想法
- 对已有apk进行重新签名
- 3GPP TS 23501-h20 中英文对照 | 5.29.2 5G VN group management
- 微信扫码支付notify_url回调接收通知问题
- 微信小程序云开发沉浸式(透明)状态栏的实现(怎么写)
- maven package后 Idea项目中找不到target文件
- SAP 接口 inbound (SAP CALL JAVA ) 负载均衡说明