手机版

JavaScript外观模式的详细说明

时间:2021-09-03 来源:互联网 编辑:宝哥软件园 浏览:

与子系统的外部通信必须通过系统的外观对象来实现,这就是外观模式。

门面模型有以下两个角色:

1.门面角色

客户端可以调用这个角色的方法,其中有子系统的应用(知道相关子系统的功能和职责)。该角色会将客户端发送的所有请求委托给相应的子系统。

2.子系统角色

可以同时有一个或多个子系统。每个子系统不是一个单独的类,而是一些类的集合。每个子系统都可以由客户端直接调用(这样客户端就有更多的代码)或者由门面角色调用。子系统不知道门面的存在。对于子系统来说,facade只是另一个客户端。

我们来看一个可以撤回门面模型的简单需求:主人为他的宠物狗办理的相应的宠物收养证明

从这个简单的需求中,我们可以大致分析我们需要什么:关于主人Person类和宠物狗Dog dog类的一些相关信息

在下面的例子中,中国将涉及接口验证。现在先粘贴代码

//(定义一个静态方法,实现接口和实现类的直接验证。//静态方法不应该写出Interface.prototype,因为它写在接口的原型链上。//我们需要将静态函数直接写到类级别。//定义接口类var Interface=function (name,Methods){//name:Interface name if(arguments . length 2){ alert('必须是两个参数')} this.name=namethis . methods=[];//为(var i=0)定义空数组加载函数名;长度;i ){ if(typeof methods[i]!='string'){ alert('函数名必须是字符串类型');} else { this . methods . push(methods[I]);} }};接口。确保实现=函数(对象){if(参数。length 2){抛出新错误('必须至少有2个参数')返回false} for(var I=1;长度;I){ var inter=arguments[I];//如果是接口,则必须是接口类型if(inter.constructor!=接口){抛出新错误('如果是接口类,必须是接口类型');}//判断接口中的所有方法是否都实现了//遍历函数集为(var j=0;jinter . methods . length;j ){ var方法=inter . methods[j];//接口中的所有函数//对象[方法]传入的函数//最后是判断传入的函数是否与接口中使用的函数匹配if(!object[method]| | type of object[method]!='function' ){ //实现类中必须有一个与接口中使用的方法名相同的方法名。抛出新错误('接口中的所有方法都没有在实现类中完全实现')} } } } }(1)Master human(Person类)

函数Person(){ this . name=' test ';This.address=“生活在中国”;this . Getinfo=function(){ return ' name ' this . name ' address ' this . address;};this . learn=function(){ alert(' learning method ');} this . marray=function(){ alert(' marray ');}//验证接口interface.ensureimplement (this,person Dao);//验证这个类是否实现了接口中的所有方法}(2)宠物狗(Dog类)

var DogDao=新接口(' DogDao ',['getInfo ',' call ',' run ']);var Dog=function(){ this . name=' gg ';this . Getinfo=function(){返回‘狗的名字’this . name;};this . call=function(){ };this . run=function(){ };Interface.ensureImplement(这个,DogDao);//验证界面}(3)现在主人可以为自己的宠物狗-客户端代码办理宠物领养证了

第一种方法:没有门面的客户端代码如下

功能动作(人、狗){ var r='GG '新日期()。getDay(). math . floor(math . random()* 11);Var str='成功申请:否' r 'br/所有者信息' person.getInfo() 'br狗信息:' dog . getinfo();返回字符串;} document . write(action(new Person()、new Dog());第二种方法:使用facade模式——将复杂的事情交给facade可以减轻客户端的压力

#1:以下处理在门面中进行

功能外观(人、狗){ var r='GG '新日期()。getDay(). math . floor(math . random()* 11);Var str='成功申请:否' r 'br/所有者信息' person.getInfo() 'br狗信息:' dog . getinfo();This.action=function () {//等效于实例的方法返回字符串;};}#2:客户端使用的代码是

函数action2(人,狗){ document.write(新门面(人,狗))。action());}action2(new Person()、new Dog());综上所述,我们可以看到不适合门面模式的客户需要处理复杂的业务。使用facade后,他们可以在facade中处理复杂的事情,但客户只需要简单地调用它。

浅谈立面图案的图形结构:

以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。

版权声明:JavaScript外观模式的详细说明是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。