`
topcss
  • 浏览: 101246 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
文章分类
社区版块
存档分类
最新评论

JAVASCRIPT设计模式书上讲的接口的定义,鸭式辩型法

 
阅读更多

下面是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设计模式与开发实践.pdf

    本书共分为三大部分,分别是JavaScript语言面向对象和函数式编程的知识、设计模式的讲解、面向对象的设计原则和代码重构。 第一部分讲解了JavaScript语言的面向对象和函数式编程的知识,包括静态类型语言和动态类型...

    JavaScript设计模式与开发实践_himppf_js_jspremise_精通javascript_Js设计模式_

    创建型设计模式如单例模式、工厂模式、建造者模式等,关注对象的创建过程,确保在程序中只存在一个实例或者提供一个创建对象的接口。结构型模式如代理模式、装饰器模式、适配器模式等,关注如何组合和连接类与对象,...

    JavaScript高级与设计模式.zip

    在这个"JavaScript高级与设计模式"的主题中,我们将深入探讨JavaScript的高级特性以及如何在实践中应用设计模式。 首先,让我们关注JavaScript的高级特性。这些特性包括但不限于: 1. **闭包(Closures)**:闭包...

    学用 JavaScript 设计模式

    JavaScript设计模式的学习与应用,对于开发者来说,不仅是一种技术上的提升,更是对软件设计思想的深化理解。通过不断地实践,开发者能够更好地理解如何构建高质量的软件,从而在软件开发过程中做出更加明智的决策。

    JavaScript设计模式与开发实践1

    全书分为三个部分,涵盖了JavaScript面向对象、函数式编程、设计模式及其实践、面向对象的设计原则等多个重要主题。 第一部分主要讲解JavaScript的基础知识,包括静态类型语言和动态类型语言的区别,以及它们在实现...

    JavaScript设计模式之接口.pdf

    JavaScript 设计模式之接口 在软件开发中,接口是一个非常重要的概念,它提供了一个契约,指定了对象必须实现的一组方法。JavaScript 作为一门弱类型语言,并没有内建的接口支持,但是这并不意味着我们不能在 ...

    设计模式(包含java\c#\javascript等语言的设计模式)

    GOF 23设计模式,由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides四位大师在1994年提出的,包含了23种经典的设计模式,这些模式可以分为三类:创建型、结构型和行为型。 1. 创建型模式: - 单例模式...

    设计模式_javascript_源码.zip

    设计模式是软件工程中的一种最佳实践,它是在特定上下文中解决常见问题的模板,可以被重复使用,以创建高效、可维护的代码。在JavaScript中,尽管它是一种动态类型的脚本语言,但同样可以从设计模式中受益。在这个...

    几种js设计模式.rar

    JavaScript设计模式是编程实践中的一种标准解决方案,用于解决常见的软件设计问题。这些模式是经验丰富的开发者在反复试验和错误中总结出来的最佳实践,旨在提高代码的可读性、可维护性和可扩展性。在这个"js设计...

    包含javascript的基础语法,面向对象的实现和设计模式实现.zip

    包含javascript的基础语法,面向对象的实现和设计模式实现Javascript 代码其中很多都是伪代码的写法,便有回顾和总结。参考资料包含javascript的基础面向对象的实现设计模式实现语法开javascript常见的问题...

    JavaScript书籍(JavaScript模式.pdf+JavaScript高效图形编程.pdf)

    3. **设计模式**:讲解经典的面向对象设计模式,如单例、工厂、观察者等,并讨论如何在JavaScript中实现。 4. **错误处理**:如何有效地捕获和处理运行时错误,提高程序的健壮性。 5. **异步编程**:介绍回调函数、...

    JS设计模式笔记和代码

    1. **工厂模式**:这是一种创建型设计模式,它提供了一个创建对象的接口,但允许子类决定实例化哪一个类。工厂模式让类的实例化过程延迟到子类进行,使得代码更加灵活,同时也隐藏了对象创建的细节。 2. **单例模式...

    Pro_JavaScript_Design_Patterns

    《Pro_JavaScript_Design_Patterns》是 Yahoo 和 Google 的UI工程师们共同智慧的结晶,专注于探讨如何在JavaScript编程中应用设计模式。设计模式是软件工程中的宝贵经验总结,它们是解决常见问题的最佳实践,使得...

    JavaScript函数式编程.pdf

    不过,由于【标题】中提供了文档的名称——"JavaScript函数式编程.pdf",我可以根据这个名称扩展出关于JavaScript函数式编程的知识点。 JavaScript函数式编程的知识点非常丰富,涉及很多方面的内容,下面将详细介绍...

    javascript设计模式 – 建造者模式原理与应用实例分析

    本文实例讲述了javascript设计模式 – 建造者模式原理与应用。分享给大家供大家参考,具体如下: 介绍:建造者模式又称为生成器模式,它是一种较为复杂、使用频率相对较低的创建型模式。建造者模式为客户端返回的...

    设计模式java源码-JavaScript-Design-Patterns:JavaScript设计模式Udacity课程的源代码

    在JavaScript中,设计模式通常分为三类:创建型、结构型和行为型。下面我们将深入探讨这些设计模式及其在源码中的应用: 1. **创建型模式**: - **单例模式(Singleton)**:确保一个类只有一个实例,并提供全局...

Global site tag (gtag.js) - Google Analytics