本文来自CSDN博客http://blog.csdn.net/allen1981813/archive/2007/08/17/1747568.aspx
名词解释:
工厂方法模式 是一种面向对象的设计模式。通过调用不同的方法返回需要的类,而不是去实例化具体的类。 对实例创建进行了包装。 工厂方法是一组方法, 他们针对不同条件返回不同的类实例,这些类一般有共同的父类。
工厂方法模式实施一种按需分配的策略, 即传入参数进行选择, 工厂方法根据参数进行选择,返回具体的实例。
内定义制 把函数定义放在类内
外定义制 把函数定义放在类外,对于 [动态定义类模式] 的 javascript类实现手法,这个可以区分函数是否属于virtual。
总体上说,内外定义的方法是完全一样地,内定义制度,可能更迎合class关键字习惯的人吧。我更倾向于外边定义,这样就完全类似java,也就是默认完全是virtual方法。
特别指出
[动态定义类模式]口头协议,内部定义制 为一般函数定义,外部定义制度为virtual函数。
昵称:
Virtual Constructor
实现语言:javascript
昨天实现了javascript的2种类创建方法,在一定程度上,他们很类似java,似乎默认为virtual函数(方法)。
这几天在复习设计模式,正停在工厂方法(Factory Method我喜欢称之为:createMethod)。觉得该模式是充分体现OO特性的模式之一,于是在昨天的类上添加了一个方法(当然,在昨天证明下,应该是virtual的了,而且默认是)。
-------------------------------------------------------------------
分别在四个类中追加如下代码:
//It will be overrided by child
CPrototypeBase.prototype.createMethode = function()
...{
alert( "CPrototypeBase::createMethode" );
};
//Overrided
CPrototypeChild.prototype.createMethode = function()
...{
alert( "CPrototypeChild::createMethode" );
};
以下4个尤其注意,我不把他们放入...{}内,否则出错,而是追加在类“内定义制”外,我称之为“外定义制”。
该函数readAdditionalInfo 被从原先版本中搬出:
//This guy will be by its child overrided.
CDynamicBase.prototype.readAdditionalInfo = function()
...{
this.m_strAdditionalInfo = "This is an additional information on CDynamicBase.";
};
//it will be overrided by child
CDynamicBase.prototype.createMethode = function()
...{
alert( "CDynamicBase::createMethode" );
};
//Overrided
CDynamicChild.prototype.createMethode = function()
...{
alert( "CDynamicChild::createMethode" );
};
//Override
CDynamicChild.prototype.readAdditionalInfo = function()
...{
this.m_strAdditionalInfo
= "Hallo!!!!This is an overrided additional information on CDynamicChild.";
};
在2个base里追加同样一句话:
this.createMethode();
-----------------------------------------------------------------
好了,也就完成了。代码实现也通过,message实现正常。
名词解释:
工厂方法模式 是一种面向对象的设计模式。通过调用不同的方法返回需要的类,而不是去实例化具体的类。 对实例创建进行了包装。 工厂方法是一组方法, 他们针对不同条件返回不同的类实例,这些类一般有共同的父类。
工厂方法模式实施一种按需分配的策略, 即传入参数进行选择, 工厂方法根据参数进行选择,返回具体的实例。
内定义制 把函数定义放在类内
外定义制 把函数定义放在类外,对于 [动态定义类模式] 的 javascript类实现手法,这个可以区分函数是否属于virtual。
总体上说,内外定义的方法是完全一样地,内定义制度,可能更迎合class关键字习惯的人吧。我更倾向于外边定义,这样就完全类似java,也就是默认完全是virtual方法。
特别指出
[动态定义类模式]口头协议,内部定义制 为一般函数定义,外部定义制度为virtual函数。
昵称:
Virtual Constructor
实现语言:javascript
昨天实现了javascript的2种类创建方法,在一定程度上,他们很类似java,似乎默认为virtual函数(方法)。
这几天在复习设计模式,正停在工厂方法(Factory Method我喜欢称之为:createMethod)。觉得该模式是充分体现OO特性的模式之一,于是在昨天的类上添加了一个方法(当然,在昨天证明下,应该是virtual的了,而且默认是)。
-------------------------------------------------------------------
分别在四个类中追加如下代码:
//It will be overrided by child
CPrototypeBase.prototype.createMethode = function()
...{
alert( "CPrototypeBase::createMethode" );
};
//Overrided
CPrototypeChild.prototype.createMethode = function()
...{
alert( "CPrototypeChild::createMethode" );
};
以下4个尤其注意,我不把他们放入...{}内,否则出错,而是追加在类“内定义制”外,我称之为“外定义制”。
该函数readAdditionalInfo 被从原先版本中搬出:
//This guy will be by its child overrided.
CDynamicBase.prototype.readAdditionalInfo = function()
...{
this.m_strAdditionalInfo = "This is an additional information on CDynamicBase.";
};
//it will be overrided by child
CDynamicBase.prototype.createMethode = function()
...{
alert( "CDynamicBase::createMethode" );
};
//Overrided
CDynamicChild.prototype.createMethode = function()
...{
alert( "CDynamicChild::createMethode" );
};
//Override
CDynamicChild.prototype.readAdditionalInfo = function()
...{
this.m_strAdditionalInfo
= "Hallo!!!!This is an overrided additional information on CDynamicChild.";
};
在2个base里追加同样一句话:
this.createMethode();
-----------------------------------------------------------------
好了,也就完成了。代码实现也通过,message实现正常。