博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
针对接口编程
阅读量:4578 次
发布时间:2019-06-08

本文共 1875 字,大约阅读时间需要 6 分钟。

针对接口编程

针对接口编程:

针对接口编程,不要针对具体编程是依赖倒转原则的另外一种表述。针对接口编程又称为面向接口编程,针对接口编程就是要先设计一系列的接口,把设计和实现分离开。

其核心思想是,我们只提供你使用的接口,接口中的代码如何实现的我们不管,你可以更改接口中的内容,但接口的使用方法是永远也不会改变的。

以下用一个例子来说明,什么是针对接口编程。

加密解密是我们用的比较多的东西,有时候,公司开发的过程中用到了一种加密算法,输入字符串后经过加密算法处理了,然后输出加密过的字符串。可能一开始用的是一种加密方法,到后面又换了另外一种加密方法,这个时候,如果你不是针对接口编程,你就得挨个的修改各个使用了该加密方法的接口,效率低,对吧,那就请看下面的例子吧:

先提供加密解密的接口:

CipherInterface.h 与 CipherInterface.m

////  CipherInterface.h//  MD5////  Copyright (c) 2014年 Y.X. All rights reserved.//#import 
@interface CipherInterface : NSObject// 加密接口- (NSString *)enCryptKey:(NSString *)key string:(NSString *)string;// 解密接口- (NSString *)deCryptKey:(NSString *)key string:(NSString *)string;@end
////  CipherInterface.m//  MD5////  Copyright (c) 2014年 Y.X. All rights reserved.//#import "CipherInterface.h"@implementation CipherInterface// 加密接口- (NSString *)enCryptKey:(NSString *)key string:(NSString *)string{    return nil;}// 解密接口- (NSString *)deCryptKey:(NSString *)key string:(NSString *)string{    return nil;}@end

因为加密解密的方式有很多种,但我们这里提供出一个统一的接口,至于这个接口里面到底是实现了那种加密方式,是由我们决定的。

在这里,如果我们用的des加密,我们可以这么写(以下都是空代码):

////  DesCrypt.h//  MD5////  Copyright (c) 2014年 Y.X. All rights reserved.//#import 
@interface DesCrypt : NSObject// 加密接口- (NSString *)enDesKey:(NSString *)key string:(NSString *)string;// 解密接口- (NSString *)deDesKey:(NSString *)key string:(NSString *)string;@end
////  DesCrypt.m//  MD5////  Copyright (c) 2014年 Y.X. All rights reserved.//#import "DesCrypt.h"@implementation DesCrypt// 加密接口- (NSString *)enDesKey:(NSString *)key string:(NSString *)string{    return @"Des";}// 解密接口- (NSString *)deDesKey:(NSString *)key string:(NSString *)string{    return @"Des";}@end

此时,可以把接口修改成这样子:

对外接口是没有任何变化的呢

如果,我们要切换加密方式,切换成AES加密,这个时候,只用在实现里面修改就行了。

其实,这就是把设计和实现分离的一个很好的例子,设计的接口具有通用性,而实现是根据需求来变化的:),可以方便的改变而不影响使用。

 

 

 

 

 

 

 

 
 

转载于:https://www.cnblogs.com/YouXianMing/p/3966396.html

你可能感兴趣的文章
TCP协议
查看>>
高级IO-锁与进程和文件
查看>>
对象在内存中的布局-对象的创建
查看>>
FZU 1077 铁皮容器 【枚举/二分】
查看>>
uva 11795 Mega Man's Mission(动态规划-状态压缩DP)
查看>>
MATLAB实现曲线拟合
查看>>
html总结
查看>>
WPF RichTextBox,关键字搜索,样式改变,超链接替换,图文混排
查看>>
gc日志分析
查看>>
数据结构--栈的思想与数组实现
查看>>
javascript的构造函数和原型
查看>>
ES数据迁移之elasticdump
查看>>
详解C#break ,continue, return
查看>>
Python如何发布程序
查看>>
java中使用session的一些细节
查看>>
浏览器输入服务器端口号来访问html网页
查看>>
hdu 6435 CSGO(最大曼哈顿距离)
查看>>
GridControl详解(四)分组排序汇总 .
查看>>
logback框架之——日志分割所带来的潜在问题
查看>>
链路追踪工具之Zipkin学习小记
查看>>