zoukankan      html  css  js  c++  java
  • 针对接口编程

    针对接口编程

    针对接口编程:

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

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

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

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

    先提供加密解密的接口:

    CipherInterface.h 与 CipherInterface.m

    //
    //  CipherInterface.h
    //  MD5
    //
    //  Copyright (c) 2014年 Y.X. All rights reserved.
    //
    
    #import <Foundation/Foundation.h>
    
    @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 <Foundation/Foundation.h>
    
    @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加密,这个时候,只用在实现里面修改就行了。

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

     
     
  • 相关阅读:
    swift中数组和字典得使用,及循环得使用方法(xcode6版本上所写代码)
    ScrollView各属性,及代理方法汇总
    贝塞尔曲线
    iOS基础教程-collectionView的应用
    iOS中,使用block传值简单应用
    ES6~Promise的原理及使用一(copy自: https://www.cnblogs.com/lvdabao/p/jquery-deferred.html)
    react~setState的运行机制
    react ~4.组件table的使用及表格分页处理
    react ~3.动态无限层级顶部菜单和左边菜单设计制作
    react ~2.登陆页面验证码的获取传递与刷新
  • 原文地址:https://www.cnblogs.com/YouXianMing/p/3966396.html
Copyright © 2011-2022 走看看