设计模式学习笔记
来源:互联网 发布:xbmc使用教程网络硬盘 编辑:程序博客网 时间:2024/06/05 01:08
一、适配器模式 | Adapter Pattern
ListView用于显示列表数据,但是作为列表数据集合有很多形式,有Array,有Cursor等,我们需要对应的适配器作为桥梁,处理相应的数据(并能形成ListView所需要的视图)。
正是因为定义了这些适配器接口和适配器类,才能使我们的数据简单灵活而又正确的显示到了adapterview的实现类上。
在设计模式体系中属于结构型模式,分为三类:
- 类的适配器模式
- 对象的适配器模式
- 接口的适配器模式
由于类和接口的适配器模式需要适配器继承原有的类,而纯面向对象语言Java、C#都是不支持多继承的,这在一定程度上制约了类和接口的适配器模式的使用场景,故使用的时候要注意。
使用目的:将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
类适配器模式
说明:
当新接口出现的时候,由于和老的接口不兼容,这个时候,我们采用一个适配器类实现新的接口并且继承老的业务类,这样就能同时处理新老业务。
示例代码:
/** * 原始类 */class Source { public void oldFunction() { System.out.println("oldFunction:Source"); }}interface Target { void oldFunction(); // 新接口 void newFunction();}// 适配器,用来做接口转换class Adapter extends Source implements Target { public Adapter() { super(); } @Override public void newFunction() { System.out.println("newFunction:Adapter"); }}public class A { public static void main(String args[]) { Target target = new Adapter(); target.oldFunction(); target.newFunction(); }}
输出:
oldFunction:SourcenewFunction:Adapter
对象适配器模式
说明:当新接口出现的时候,由于和老的接口不兼容,这个时候,我们采用一个适配器类实现新的接口并在内部持有一个老业务逻辑的对象,这样就能把对老接口的调用全部中转给老的业务逻辑,从而解决接口的兼容性问题
示例代码:
/** * 原始类 */class Source { public void oldFunction() { System.out.println("oldFunction:Source"); }}interface Target { void oldFunction(); // 新接口 void newFunction();}// 适配器,用来做接口转换class Adapter implements Target { // 适配器内部持有的原始类对象 private Source mSource; public Adapter(Source source) { mSource = source; } @Override public void oldFunction() { // 这里调用原始类中的方法 mSource.oldFunction(); } @Override public void newFunction() { System.out.println("newFunction:Adapter"); }}public class A { public static void main(String args[]) { Source source = new Source(); Target target = new Adapter(source); target.oldFunction(); target.newFunction(); }}
输出:
oldFunction:SourcenewFunction:Adapter
接口适配器模式
说明:也叫缺省适配器模式,主要解决接口的复用问题:有时候可能我们的业务只需要使用接口中的某一个方法而不是全部方法,但是由于接口的语言特性而不得不实现全部的抽象方法,这样就会使得接口的使用过程很麻烦,特别是接口中存在很多抽象方法的时候。面对接口的这类问题,我们可以采用一个抽象类(也可以不是抽象类)去实现接口,然后让我们的类去继承这个抽象类同时只重写我们感兴趣的方法即可。
示例代码:
interface Target { void function1(); void function2(); void function3(); void function4();}//TargetWrapper实现了Target接口,并给出了默认实现abstract class TargetWrapper implements Target { @Override public void function1() { System.out.println("function1:TargetWrapper"); } @Override public void function2() { } @Override public void function3() { } @Override public void function4() { }}// 适配器,继承TargetWrapper,重写自己感兴趣的方法class Adapter extends TargetWrapper { public Adapter() { super(); } @Override public void function2() { System.out.println("function4:Adapter"); }}public class A { public static void main(String args[]) { Target target = new Adapter(); target.function1(); target.function2(); }}
输出:
function1:TargetWrapperfunction4:Adapter
二、工厂模式 | Factory Pattern
- 设计模式学习笔记
- 设计模式学习笔记
- 设计模式学习笔记
- 设计模式【学习笔记】
- 设计模式 学习笔记
- 设计模式学习笔记
- 设计模式学习笔记
- 设计模式学习笔记
- 设计模式学习笔记
- 设计模式学习笔记
- 设计模式学习笔记
- 设计模式学习笔记
- 设计模式学习笔记
- 设计模式学习笔记
- 设计模式学习笔记
- 设计模式学习笔记
- 设计模式学习笔记
- 设计模式学习笔记
- 宏定义
- 一个通用的C/C++编译Makefile
- C++ 大规模程序设计 之 物理层次结构
- JS中window.showModalDialog()详解
- i++与++i
- 设计模式学习笔记
- Java点滴:Map与String的转换公共方法
- Linux下配置nginx支持.cgi
- 随机数的产生
- 第16周周四:GUI编程及文件对话框的使用
- 网站策划
- tomcat6 高级特性 阀(一)
- 连接设备上的有线
- poj 2965 The Pilots Brothers' refrigerator