下面是JAVASCRIPT设计模式书上讲的接口的定义。鸭式辩型法
<!DOCTYPE HTML>
<html>
<head>
<script type="text/javascript">
var Interface = function(name, methods){
if(arguments.length != 2){
throw new Error('Interface constructor called with ' + arguments.length
+ 'arguments, but expected exactly 2.');
}
this.name = name;
this.methods = [];
for(var i=0,len = methods.length; i<len; i++){
if(typeof methods[i] != 'string'){
throw new Error('Interface constructor expected method names to be '
+ 'passed in as a string.');
}
this.methods.push(methods[i]);
}
};
Interface.ensureImplements = function(object){
if(arguments.length < 2){
throw new Error("Function Interface.ensureImplements called with " + arguments.length
+ " arguments, but expected at least 2.");
}
for(var i=1,len = arguments.length; i < len; i++){
var interface = arguments[i];
if(interface.constructor != Interface){
throw new Error("Function Interface.ensureImplements expects arguments "
+ "two and above to be instances of Interface.");
}
for(var j=0,methodslen = interface.methods.length; j < methodslen; j++){
var method = interface.methods[j];
if(!object[method] || typeof object[method] !== 'function'){
throw new Error("Function Interface.ensureImplements: object " +
"does not implements the " + interface.name + " interface.Method " +
method + " was not found.");
}
}
}
};
// 定义接口
var DynamicMap = new Interface('DynamicMap', ['centerOnPoint', 'zoom', 'draw']);
function displayRoute(mapInstance){
// 接口实现检查
Interface.ensureImplements(mapInstance, DynamicMap);
mapInstance.centerOnPoint(24, 13);
mapInstance.zoom(5);
mapInstance.draw();
}
// 对象
function Foo(){
}
Foo.prototype = {
centerOnPoint : function(x, y){
document.writeln('<br />centerOnPoint: ' + x + ', ' + y);
},
zoom : function(level){
document.writeln('<br />zoom: ' + level);
},
draw : function(){
document.writeln('<br />draw');
}
};
var foo = new Foo();
displayRoute(foo);
</script>
</head>
</html>
分享到:
相关推荐
本书共分为三大部分,分别是JavaScript语言面向对象和函数式编程的知识、设计模式的讲解、面向对象的设计原则和代码重构。 第一部分讲解了JavaScript语言的面向对象和函数式编程的知识,包括静态类型语言和动态类型...
JavaScript设计模式.pdf JavaScript设计模式是指在软件开发中使用JavaScript语言编写的设计模式。这些设计模式旨在提高代码的重用性、可读性、维护性和扩展性。以下是JavaScript设计模式的知识点总结: 1. 单体...
2. **JavaScript中的设计模式**:深入研究JavaScript语言特性,理解在JavaScript中实现设计模式的特定方式,以及这些模式是如何适应JavaScript的动态类型系统和函数式编程范式的。 3. **创建型模式**:例如单例模式...
创建型设计模式如单例模式、工厂模式、建造者模式等,关注对象的创建过程,确保在程序中只存在一个实例或者提供一个创建对象的接口。结构型模式如代理模式、装饰器模式、适配器模式等,关注如何组合和连接类与对象,...
JavaScript设计模式通常可以分为三大类:创建型模式、结构型模式和行为型模式。创建型模式涉及对象实例化的机制,帮助一个系统独立于如何创建、组合和表示它的那些对象。常见的创建型模式包括工厂方法模式、抽象工厂...
在这个"JavaScript高级与设计模式"的主题中,我们将深入探讨JavaScript的高级特性以及如何在实践中应用设计模式。 首先,让我们关注JavaScript的高级特性。这些特性包括但不限于: 1. **闭包(Closures)**:闭包...
《JavaScript设计模式》一书详细介绍了JavaScript中常用的设计模式,并提供了对应的源码实现,是前端开发者进阶必备的学习资料。 本书中的设计模式可以分为三类:创建型模式、结构型模式和行为型模式。创建型模式...
JavaScript设计模式的学习与应用,对于开发者来说,不仅是一种技术上的提升,更是对软件设计思想的深化理解。通过不断地实践,开发者能够更好地理解如何构建高质量的软件,从而在软件开发过程中做出更加明智的决策。
JavaScript作为一门灵活多变的语言,其函数式编程特性、原型继承机制以及异步编程模式等都对设计模式的实现和使用提出了特别的要求和挑战。 为了更好地学习和应用这些模式,书中可能会建议读者进行一些练习,如重构...
在JavaScript中,最为常见的设计模式包括:单例模式、工厂模式、构造器模式、原型模式、观察者模式、策略模式、装饰器模式、适配器模式、中介者模式、命令模式、迭代器模式、组合模式、享元模式、代理模式等。...
全书分为三个部分,涵盖了JavaScript面向对象、函数式编程、设计模式及其实践、面向对象的设计原则等多个重要主题。 第一部分主要讲解JavaScript的基础知识,包括静态类型语言和动态类型语言的区别,以及它们在实现...
JavaScript 设计模式之接口 在软件开发中,接口是一个非常重要的概念,它提供了一个契约,指定了对象必须实现的一组方法。JavaScript 作为一门弱类型语言,并没有内建的接口支持,但是这并不意味着我们不能在 ...
在软件工程领域,设计模式是一套被反复使用、多数人知晓、分类编目、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。设计模式使代码编制真正工程化,它强调的是软件...
GOF 23设计模式,由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides四位大师在1994年提出的,包含了23种经典的设计模式,这些模式可以分为三类:创建型、结构型和行为型。 1. 创建型模式: - 单例模式...
在实际问题解决方面,书中的实例可能涵盖数据处理(如排序、过滤、映射等数组方法)、算法实现(如搜索、排序算法)、游戏开发、动画制作、API接口调用、网络请求优化等多个领域,这些都是提升JavaScript实战能力的...
- **定义**:工厂模式是一种创建型设计模式,提供了一个创建对象的接口,但允许子类决定实例化哪个类。 - **实现**: ```javascript function createAnimal(type) { switch (type) { case 'dog': return new ...
设计模式是软件工程中的一种最佳实践,它是在特定上下文中解决常见问题的模板,可以被重复使用,以创建高效、可维护的代码。在JavaScript中,尽管它是一种动态类型的脚本语言,但同样可以从设计模式中受益。在这个...
JavaScript设计模式是编程实践中的一种标准解决方案,用于解决常见的软件设计问题。这些模式是经验丰富的开发者在反复试验和错误中总结出来的最佳实践,旨在提高代码的可读性、可维护性和可扩展性。在这个"js设计...