精华内容
下载资源
问答
  • 核心代码封装 核心代码封装 核心代码封装 核心代码封装 核心代码封装 核心代码封装 核心代码封装 核心代码封装 核心代码封装 核心代码封装 核心代码封装 核心代码封装 核心代码封装 核心代码封装 核心代码封装
  • 代码封装

    千次阅读 2015-09-05 17:56:28
    封装,即隐藏对象的属性和实现细节,仅对外公开接口。 封装的目的是增强安全性和简化编程,使用者不必了解具体的实现细节,而只是要通过外部接口,以特定的访问权限来使用类的成员。 面向接口编程的写法,简单...
    封装,即隐藏对象的属性和实现细节,仅对外公开接口。
    

    封装的目的是增强安全性和简化编程,使用者不必了解具体的实现细节,而只是要通过外部接口,以特定的访问权限来使用类的成员。

    面向接口编程的写法,简单的说就是将行为封装分布在各个对象中,并让这些对象自己各自负责自己的行为,这也是面向对象设计的一个优点,就拿页面切换的效果来说,在某一时刻,元素A需要让页面进行切换,那么元素A不需要关心页面是怎么切换的,它只能要调用到一个接口方法能让页面切换就行了。JavaScript中没有抽象类与接口的支持,所以很大程度上实现JavaScript中没有抽象类与接口的支持,所以很大程度上实现封装都是靠闭包去模拟封装都是靠闭包去模拟。

    例如:

    function Swipe(container){
            var width = container.width();
            var height = container.height();
            var element = container.find(':first');
            var slides = element.find('li');
            var swipe = {};
    
            //设置ul实际长度
            element.css({
                    width: (width*slides.length)+'px',
                    height: height
            });
    
            //设置每一个li的宽度和高度都等于当前的显示容器的宽和高
            $.each(slides, function(index) {
                     var slide = slides.eq(index);
                     slide.css({
                            width: width + 'px',
                            height: height + 'px'
                     });
            });
    
            swipe.scrollTo = function(x,speed){
                 element.css({
                         "transition-timing-function":'linear',
                         "transition-duration":speed+'ms',
                         "transform":'translate3d(-'+x+'px,0px,0px'
                 }); 
                 return this;  
            };
    
            return swipe;
    }
    页面布局与切换是一个整体,我们想调用切换的时候,并不关心其内部处理的手段,所以我们只需要提供一个可以调用的接口就可以,新建一个Swipe.js文件,内部定义一Swipe工厂方法,内部会产生一个swipe的滑动对象,暴露了scrollTo的接口。封装后,可以定义滚动的对象,滚动的距离,滚动的时间。对象不用关心是怎么切换的,它只需要调用一个切换接口即可。

    展开全文
  • Oss 上传代码封装

    2018-09-12 16:43:36
    Oss 简单的上传代码封装,目前很多系统都在用这个封装的oss上传
  • Excel宏代码封装实例代码.将需要保护的代码封装为dll
  • sqlite3 dll源代码 静态库源代码 封装包源代码 涵盖sqlite3所有源代码,可以任意修改 才2个积分,绝对超值
  • VBA代码封装完整示例.rarVBA代码封装完整示例.rarVBA代码封装完整示例.rar
  • 代码优化:重复代码封装成函数

    千次阅读 2016-04-07 21:48:20
    代码优化:重复代码封装成函数
    优化前的代码:
    
    WorkDemo wd0 = new WorkDemo("采集节点一");  
    WorkDemo wd1 = new WorkDemo("采集节点二");  
    WorkDemo wd2 = new WorkDemo("采集节点三");  
    WorkDemo wd3 = new WorkDemo("采集节点四");  
    WorkDemo wd4 = new WorkDemo("采集节点五");  
    WorkDemo wd5 = new WorkDemo("采集节点六"); 
    WorkDemo wd6 = new WorkDemo("采集节点七");
    WorkDemo wd7 = new WorkDemo("采集节点八");
    WorkDemo wd8 = new WorkDemo("采集节点九");
    WorkDemo wd9 = new WorkDemo("采集节点十");


    wd0.waitWorking("localhost",2000,"WorkDemo"); 
    wd1.waitWorking("localhost",2001,"WorkDemo"); 
    wd2.waitWorking("localhost",2002,"WorkDemo");  
    wd3.waitWorking("localhost",2003,"WorkDemo");  
    wd4.waitWorking("localhost",2004,"WorkDemo");  
    wd5.waitWorking("localhost",2005,"WorkDemo");  
    wd6.waitWorking("localhost",2006,"WorkDemo"); 
    wd7.waitWorking("localhost",2007,"WorkDemo"); 
    wd8.waitWorking("localhost",2008,"WorkDemo"); 
    wd9.waitWorking("localhost",2009,"WorkDemo"); 


    优化之后:
    newWorkDemo(10);

    public static void newWorkDemo(int n){
    for(int i=0; i<n; i++){
    WorkDemo wd = new WorkDemo("采集节点"+i+":");
    wd.waitWorking("localhost",2000+i,"WorkDemo"); 
    }
    }
    展开全文
  • 简单js代码封装

    千次阅读 2018-07-30 15:04:53
    简单js代码封装 关于代码封装,首先举一个常见的例子 function test() { this.name='test'; this.getname=function(){ console.log(this.name) } } var T=new test();//创建实例化对象 console.log(T.name);//调用...

    简单js代码封装

    关于代码封装,首先举一个常见的例子

    function test()
    {
    this.name='test';
    this.getname=function(){
    console.log(this.name)
    }
    }
    var T=new test();//创建实例化对象
    console.log(T.name);//调用属性
    T.getname();//调用方法
    

    这是一个很简单的函数封装,可以通过function隔离作用域,防止同名属性的污染。但是在某些应用场景中还是有一些问题,那么我们看下下一段代码。

    (function(window){
    var name = 'test2';
    var getname = function(){
    console.log(name);
    };
    //暴露getname方法
    window.getname = getname;
    }(window));
    
    getname();//调用方法

    上面这段代码使用的是IIFE: Immediately Invoked Function Expression,意为立即调用的函数表达式,也就是说,声明函数的同时立即调用这个函数。

    我们可以很明显的看到,使用IIFE,在调用getname()是不用创建一个实例化对象的,同时我们可以控制想要暴露出去的属性和方法。

    因此,根据使用场景的不同,我们可以灵活的选择使用不同的代码封装方法。

    展开全文
  • VC++代码封装libvlc库,实现播放本地视频和远程视频;VC++代码封装libvlc库,实现播放本地视频和远程视频
  • 谈一谈代码封装

    千次阅读 2018-08-09 10:39:58
    前言 面向对象程序设计有三个特征:封装、继承、多态,这三个特征即是语法也是手段,23种设计模板其实就是对这三种手段的灵活应用,今天不谈任何高大上的设计模式,仅仅谈谈代码封装。 ...

                                                                                        前言

    面向对象程序设计有三个特征:封装、继承、多态,这三个特征即是语法也是手段,23种设计模板其实就是对这三种手段的灵活应用,今天不谈任何高大上的设计模式,仅仅谈谈代码封装。

                                                                                        引子

    从三个特征的排序上,封装是第一位的,个人认为也是最重要的,且是后里面两个的基础。很长时间以来封装很容易被忽视,可能是有人觉得这个太简单了,封装不就是组织代码吗?不就是构造一个个类,一个个方法吗,没有什么好说的啊?确实现在是一个基于框架开发的时代,开发只是往框架里“填充”业务代码,似乎不太需要考虑太多东西。但其实“封装”很重要,“封装”就是开发层面的“微设计”,今天说主要说下方法/函数(以下简写为F)的封装这一点,以类为单位的设计往往都上升了模块设计的高度。

    最近一段时间以来,发现一些不是很令人赏心的代码,总觉得跟这个东西有关。

    1、认清关系

    首先来考虑一个问题,FA调用FB,那么他们是什么关系?理解他们之前的关系重要吗?如果你觉得不重要、就是调用者与被调用者关系(等于没说),就大错特错了。如果你的代码一直写的不好,我觉得很有可能就是这一点没认识清楚。想要回答这个问题,只要考虑另外一个问题,FA为什么要调用FB?——因为FA不调用FB就无法完成自己的工作,FB能帮助自己完成一些事情,也就是说FA依赖FB,他们之间的关系是依赖。这个认识会直接影响到你代码的组织。

    1、1          向下原则

    举例之前,再考虑另外一个问题,依赖者之间的位置或者层次是什么样的?答案是上下的,不是平行的。也就是说FB在FA下层,为FA提供服务,这个可以参照ISO七层模型来理解,也可以参考我们的框架,web层->service层->dao层。《代码整洁之道》里称之为向下原则。

    这些东西容易理解,自己写代码时候确容易考虑不到。一个例子,假设有个方法有300行代码,里面有些东西可以封装子F来,你会怎么做?我相信大部分人做的都还可以。但有这么个做法,他/她把方法拆成了三个方法,F1,F2,F3,F1调用F2,F2调用F3,每个方法体里面基本上是之前方法的一段代码,比如F1是1~100行代码,F2是101~200行,F3是201到300行,三个方法需要的参数几乎都是一样的,通过形参依次传递下去,而且返回值都是void类型,/她给方法的名字和注释也很尴尬意思都很接近

    大家觉得这个做法怎么样?这个做法仅从形式上看就不行,每个方法都是原来方法身体的一部分从逻辑上他们是平行的,可以认为它还是一个方法,他们之间不是依赖关系。这样封装代码仅仅是把代码挪了个地方,还不如不拆分,阅读者得自己脑补,把代码合并起来才能知道到底想干什么。把一个方法比喻成一个人,那么如果这个方法需要重构,抽离出来的方法仍然必须是个人,是个五脏六武俱全的mini小人,而不是这个人的手或者脚。

    1、2          封装不是简简单单的挪动代码

    上述例子中,F1调用F2,F2调用F3,或者F1调用F2、F3都可能是合理的,关键看几个F封装的符不符合我们常见的原则,后续我们将均使用上面的例子,因为它很巧的违反了很多原则,可以帮助我们理解这些原则,一般来说有以下几个原则。

    2、单一职责原则

    最重要的原则,见名知意。单一职责,强调的是职责的分离,一个方法只干一件事情,只因为一个原因做修改。很多代码之所以需要重构,因为有职责扩散。所谓职责扩散,就是因为某种原因,职责P被分化为粒度更细的职责P1和P2。

    从微观上讲,单一职责的方法一目了然,职责明确,利于维护。从宏观上讲是设计的要求,单一职责原则可以看作是低耦合、高内聚在面向对象原则上的引申,将职责定义为引起变化的原因,职责过多,可能引起它变化的原因就越多,从而极大的损伤其内聚性和耦合度。

    这个原则非常好理解,最常见的违反这个原则的例子就是写“大而全”的方法,一个方法搞定各种逻辑,各种flag,各种分支判断,到最后代码看不出主逻辑是什么了。

    如果单一职责原则做的好,代码都不会太长,随便翻开Apache的开源软件源码,大部分的方法都没超过100行,当然有些核心类、管理类等,长代码还是有的。

    除了大而全的方法,想想上面的F1~F3的例子,有没有违反单一原则?与大多数人职责过多相反,它是因没有职责而违反。这里有个“诡辩”,只要不是空方法,只要方法里有代码、有逻辑就有职责,这一点我不太同意。这是个职责范围的认定问题,虽然职责的认定是仁者见仁智者见智的,但是我觉得有些基本的东西是确切的,比如职责必须很明确、完整。 上述F1~F3,每个方法都没有完整明确的职责,看代码的感受就是不知道这个方法想干什么,感觉每个方法的存在意义都不大,逻辑合并起开才勉强知道想干什么,所以我认为职责模糊的方法是违反单一原则的。还有就是返回值,有返回值并且设置void的,也属于职责不明确。除非真的没有返回值可以用void,否都应该返回值。隐式返回容易让调用者遗忘哪些变量被改变了,进而引起编程bug。

    3、最少知道原则

             这也是个非常重要的原则。直接借用定义:一个对象应该对其他对象保持最少的了解。通俗的来讲,就是一个类对自己依赖的类知道的越少越好。也就是说,对于被依赖的类来说,无论逻辑多么复杂,都尽量地的将逻辑封装在类的内部,对外除了提供的public方法,不对外泄漏任何信息。

    函数层次上也要遵循次原则,方法的开口尽可能的小,入参之间不要有依赖,一个极端的例子:一个方法有3个入参,但是第1个和第2个能计算出第3个,就是违反最少知道原则,第三个参数应该在方法体里计算出来。

    入参过多很可能会违反最少知道原则,上面的F1,F2,F3的例子,形参个数多达10个。有些很复杂的场景,传递的参数如果真的必须很多的话,考虑用有意义的实体封装,这个封装其实是对入参“归类”,虽然需要的参数还是需要一一“拿到”然后放进实体里,但是归成一类逻辑上可以看成“一个”。很多公司的规范对形参个数都有要求。

     4、考虑线程安全问题

    线程安全问题平时很难测试到,需要特别注意,时时注意。静态变量、单例的成员变量都是可能被多个线程访问的、资源的非原子操作(例如数据库一个值读取出来后,再update+1)等等,设计类时把考虑线程是否安全当成一个习惯

    5、好的代码是什么样的

    好多人常说优雅,优雅是代码的最高境界。我们不说优雅,一般来说比较优秀的代码是什么样的?根据之前的解释,以函数为单位,个人觉得好的代码是一颗树,一颗主干分支分明、错落有致的树。入口函数可以看成树的主干,调用的函数是分支,树是逐渐细化的。如果单独看一个分支的话,它还是一颗树。试想一下,没有分支、只有主干的树是否美观?主干和分支一样粗的树是否美观?一个不平衡的树是否美观?

    其实编写代码是需要一定的审美的,如果你的代码不美观,很可能你的审美有问题。

    展开全文
  • QT代码封装成dll和lib文件及使用

    万次阅读 2018-06-27 19:53:24
    开发环境:win7+QT5.8(msvc)一、Qt代码封装成dll和lib文件1.创建library工程此处需要勾选QtCore,因为后面需要使用该库内QtCore/qglobal.h文件中的 Q_DECL_EXPORT 类 debug模式下,运行,生成.dll和.lib等文件...
  • Unity C#代码封装dll文件完美教程(Chinar-开发者必经之路) 将脚本封装为DLL库,本文提供全流程,中文翻译。 助力快速完成 Unity C#脚本文件封装为 DLL 库文件 DLL (Dynamic Link Library) —— 中文:动态链接库 ...
  • Flutter学习(四)Http请求库 dio代码封装 第一步 依赖库 打开flutter package网站,入口,找到dio这个组件,查看最新版本 打开 项目根目录下 ** pubspec.yaml ** 文件 添加库名,添加库名 最好是填写 any(** ...
  • java前端代码封装问题

    2017-01-16 02:45:21
    求助,我现在接了一个java前端的项目,有些代码看不到,好像是封装了,应该怎么样才能看到被封装代码?哪位大神帮帮我
  • 微信小程序带cookie的request请求代码封装 写一个工具函数,直接导入使用即可,接口同 wx.request 。会自动设置和更新 cookie。 const request = function (obj) { let key = 'cookie' let cookie = wx....
  • VBA代码封装完整示例

    2011-11-01 18:45:47
    用VB6制作DLL文件,一个较为完整的vb封装vba代码的示例 。
  • 把常用的代码封装成为一个函数,会有助于代码性能提升 ## Just In Time compilers ## 热代码:一个被不断使用的函数或者对象 ## V8编译器会对热代码进行优化 ## 如果这些是没有改变的参数, V8 will compile it ...
  • 在keil中将写好的文件代码封装成Lib库 1、首先将之前的工程项目文件进行一次复制粘贴备份,备份完成后,打开工程文件进入工程管理选项(project->mange->project Items),移除不需要的文件,仅保留需要打包为...
  • C#通过NOPI导出Excel(支持Excel2007以上和以下,全支持,完整代码封装,绝对可用,支持List,DataTable),资源包含,导出的Nopi所需的所有dll引用,导出源代码封装,代码使用范例。真实可用。直接引入开发,可在源...
  • OpenGL图形代码封装

    千次阅读 2009-02-08 14:34:00
    感觉OpenGL里的好多东西都是固定的,所以先前做了一个模板,以后编图形代码时,直接套用模板就好了,但是后来又觉得这不太合服自己一向的编程思想(OOP嘛),所以打算把这些图形代码封装成一个类,以后就可以直接...
  • C#中源代码封装步骤

    2009-05-25 22:29:35
    这里面有c#代码如何实现封装的具体步骤,大家可以参考一下啊!具体的课参考里面
  • 一、代码封装成dll文件 步骤一:创建工程 图1:创建生成dll的工程 图2 图3 图4: 注意此处需要勾选QtCore,因为后面需要使用该库内QtCore/qglobal.h文件中的 Q_DECL_EXPORT 类 ...
  • 如何进行代码封装

    千次阅读 2017-08-15 14:08:12
    可以使用如下例子进行QT封装,使外部不需要包含Qt头文件class BaseExport StopWatch { public: StopWatch(); ~StopWatch(); void start(); int restart(); int elapsed(); std::string toString(int ms) ...
  • nodejs代码封装基础

    千次阅读 2016-07-21 16:41:59
    nodejs本身是异步的,所以大部分封装都会用callback这种类型,比如查询数据库封装等. --  Promise风格 promise.js var Promise = require('bluebird') var obj = {}; obj.sum = function(a, b){ var ...
  • python 如何将代码封装成exe软件

    千次阅读 2019-10-22 11:50:20
    封装成exe软件代码: 打开存储的py文件所在路径 输入cmd,进入控制台,控制台路径为py文件所在路径 输入封装代码:pyinstaller -F -c new_client.py -i u.ico(-c代表携带控制台窗口,-w代表关闭控制台窗口) ...
  • Selenium2.0 自动化测试代码封装

    千次阅读 2018-05-19 07:51:27
    一、框架设计原理:二、封装之前和封装之后代码的对比:1、封装代码结构:2、封装之前的代码结构三、封装的方法:1、getByLocator的编写:配置文件的路径、封装元素属性的定位方法。2、ProUtil 的编写:读取配置...
  • 他山之石——VBA代码封装

    千次阅读 2018-07-17 22:22:08
    继续学习VBA! 话说CSDN又改版了啊,这世界天天在变化啊! '1 什么是DLL文件 'DLL是Dynamic Link Library 的缩写形式,DLL是一个包含可由多个程序同时使用... '可执行代码位于一个 DLL 中,该 DLL 包含一个或多...
  • C#实现的水纹特效代码封装

    热门讨论 2009-11-01 23:11:43
    C#做的水纹特效,效果非常不错。代码还未进行优化,还有优化余地。代码都有封装,可以直接使用。
  • Python入门:代码封装之函数

    千次阅读 2016-05-22 17:32:13
    函数的存在是为了将一段可以描述一个功能的代码进行封装二、函数的两个基本特征1、函数是有返回的(return) 2、如果不写return就是默认返回none三、封装示例#下面是一段描述两个随机数相加的**过程**代码 i

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,525,183
精华内容 610,073
关键字:

代码封装