简介
根据目的和范围,设计模式可以分为五类。按照目的分为:创建设计模式,结构设计模式,以及行为设计模式。按照范围分为:类的设计模式,以及对象设计模式。下面分别介绍
。
创建设计模式
创建设计模式(Creational patterns),用于创建对象时的设计模式。更具体一点,初始化对象流程的设计模式。当程序日益复杂时,需要更加灵活地创建对象,同时减少创建时的依赖。而创建设计模式就是解决此问题的一类设计模式。
结构设计模式
结构设计模式(Structural patterns),用于继承和接口时的设计模式。结构设计模式用于新类的函数方法设计,减少不必要的类定义,减少代码的冗余。
行为设计模式
行为设计模式(Behavio
继续阅读 »
本节实现的是使用内建摄像头捕获视频,并显示视频的每一帧以实现视频的播放。
创建摄像头对象
逐帧显示实现视频播放
实现过程
引用
不再赘述,代码如下。
python
import cv2
import numpy
import matplotlib.pyplot as plot
创建摄像头对象
使用opencv自带的VideoCapture()函数定义摄像头对象,其参数0表示第一个摄像头,一般就是笔记本的内建摄像头。
python
cap = cv2.VideoCapture(0)
逐帧显示实现视频播放
在while循环中,利用摄像头对象的read()函数读取视频的某帧,并显示,然后等待1个单位时间,如果期间
继续阅读 »
本文译自 Dmitry A. Soshnikov 的文章 ECMA-262-3 in detail. Chapter 4. Scope chain.
概述
通过第二章 变量对象的学习我们知道,执行上下文的数据(变量、函数声明、函数形参)都是以属性的方式储存在变量对象中。
我们还知道,变量对象是在进入执行上下文阶段被创建和初始化,随后在执行代码阶段会对属性值进行更新。
本文将深入讨论与执行上下文密切相关的另外一个重要的概念 —— 作用域链(Scope Chain)。
more
定义
如果简单扼要地讲,那么作用域链就是与内部函数息息相关的一个概念。
众所周知,ECMAScript 允许创建内部函数,甚至可以将这些内部函数作
继续阅读 »
Java面试总结-线程
1、创建一个线程
创建线程主要分为两个方法
implements Runnable接口并实现run()方法,然后由Runnable对象创建一个Thread对象,调用Tread的start()方法启动线程。
extends Thread 构建一个Thread类的子类,复写run()方法。该方法目前已不再推荐,应该从运行机制上减少需要并行运行的任务数量。
警告:不要调用Thread类或Runnable对象的run方法。直接调用run方法,只会执行同一个线程中的任务,而不会启动新线程??。应该调用Tread.start方法,这个方法将创建一个执行run方法的新线程。
```
/**
* 创建线程的两种方式
继续阅读 »
在.NET 程序中好多地方都有延迟 Lazy 的痕迹,这一点在 Linq 中发扬广大。 .NET4.0 中又引入了 System.Lazy 更加丰富了延迟的方式。
延迟主要有:延迟实例化,延迟初始化,延迟执行等。主要表达的思想是将对象延迟到使用时创建,而不是在对象实例化时创建对象,即用时才加载。这种方式有助于提高于应用程序的性能,避免浪费计算,节省内存的使用等。
继续阅读 »
创建类
1.工厂模式:解决了创建多个相似对象的问题,但却没有解决对象识别的问题(即怎样知道一个对象的类型)
```
funtion createPerson(name, age, job) {
var o = new Object();
o.name = name;
o.age = age;
o.job = job;
o.sayName = function () {
alert(this.name);
};
return o;
}
var person1 = createPerson("Nicholas", 29, "SE");
```
2.构造函数模式:缺点是每个方法都要在每个实例上
继续阅读 »
前言
在对Module模式有个熟悉的了解之后,我们来认识一个稍有改进的版本——ChristianHeilmann的Revealing Module模式。
模式的由来
原来的Module模式可能无法实现这样的需求:
当我们从另一个方法调用一个公有方法或者访问公有变量时,必须要重复主对象的名称。而且使用Module时必须要切换到对象字面量表示法来让某种方法变成公有方法。
我们需要的可能是这样的一个模式:
能够在私有范围内简单定义所有的函数和变量,并返回一个匿名对象,它拥有指向私有函数的指针,该函数是它希望展示为公有的方法。
有点拗口,还是上代码吧 (☆_☆)
more
代码
```
var myRevealingModu
继续阅读 »
1. 设计模式概念
设计模式这个术语是由Erich Gamma等人在1990年代从建筑设计领域引入到计算机科学的。它是对软件设计中普遍存在(反复出现)的各种问题,所提出的解决方案。
设计模式并不直接用来完成代码的编写,而是描述在各种不同情况下,要怎么解决问题的一种方案。面向对象设计模式通常以类或对象来描述其中的关系和相互作用,但不涉及用来完成应用程序的特定类或对象。设计模式能使不稳定依赖于相对稳定、具体依赖于相对抽象,避免会引起麻烦的紧耦合,以增强软件设计面对并适应变化的能力。
并非所有的软件模式都是设计模式,设计模式特指软件“设计”层次上的问题。还有其它非设计模式的模式,如架构模式。同时,算法不能算是一种
继续阅读 »
1. 迭代器模式
提供一种方法访问一个容器对象中各个元素,而又不暴露该对象的内部细节。迭代器模式的结构:
抽象容器:一般是一个接口,提供一个iterator()方法,例如java中的Collection接口,List接口,Set接口等。
具体容器:就是抽象容器的具体实现类,比如List接口的有序列表实现ArrayList,List接口的链表实现LinkList,Set接口的哈希列表的实现HashSet等。
抽象迭代器:定义遍历元素所需要的方法,一般来说会有这么三个方法:取得第一个元素的方法first(),取得下一个元素的方法next(),判断是否遍历结束的方法isDone()(或者叫hasNext()),移出当前对象的方
继续阅读 »
写在前面
singleton模式是被熟知的原因是因为它限制了类的实例化次数只能一次。从经典意义上来说,singleton模式在该实例不存在的情况下,可以通过一个方法创建一个类来实现创建类的新实例;如果实例已经存在,它会简单返回该对象的引用。
singleton不同于静态类(或对象),因为我们可以推迟它们的初始化,这通常是因为它们需要一些信息,而这些信息在初始化期间可能无法获得、对于没有察觉到之前的引用的代码,它们不会提供方便检索的方法。这是因为它既不是对象,也不是由一个singleton返回的“类”;它是一个结构。
思考一下闭包变量为何实际上并不是闭包,而提供闭包的函数作用域是闭包。在Javascript中,singleton
继续阅读 »