当前位置:  编程技术>综合
本页文章导读:
    ▪自己动手封装js工具类(JS中定义类的几种方式:混合的构造函数/原型方式,动态原型等)      整理内容来源网络: 1、工厂方式    function Car(){    var ocar = new Object;    ocar.color = "blue";    ocar.doors = 4;    ocar.showColor = function(){    document.wri.........
    ▪工厂方法模式      概述 工厂方法模式,英文Factorymethod pattern,工厂方法模式是简单工厂模式的进化版, 看本文之间最好先看一下简单工厂模式。工厂方法模式是定义一个创建产品对象的工厂接口,工厂接口本.........
    ▪struts2标签在显示多级属性的作用      <s:textfield name="faculty" value="%{#request.updateStudent.classroom.faculty.name}" label="院系" readonly="true"></s:textfield> 说明:request.updateStudent得到的是Student的实例,classroo.........

[1]自己动手封装js工具类(JS中定义类的几种方式:混合的构造函数/原型方式,动态原型等)
    来源: 互联网  发布时间: 2013-11-10
整理内容来源网络:
1、工厂方式 
  function Car(){ 
  var ocar = new Object; 
  ocar.color = "blue"; 
  ocar.doors = 4; 
  ocar.showColor = function(){ 
  document.write(this.color) 
  }; 
  return ocar; 
  } 
  var car1 = Car(); 
  var car2 = Car(); 
  调用此函数时将创建新对象,并赋予它所有的属性和方法。使用此函数可以创建2个属性完全相同的对象。当然我们可以通过给它传递参数来改版这种方式。 


  function Car(color,door){ 
  var ocar = new Object; 
  ocar.color = color; 
  ocar.doors = door; 
  ocar.showColor = function(){ 
  document.write(this.color) 
  }; 
  return ocar; 
  } 
  var car1 = Car("red",4); 
  var car2 = Car("blue",4); 
  car1.showColor() //output:"red" 
  car2.showColor() //output:"blue" 
  现在可以通过给函数传递不同的参数来得到具有不同值的对象。 
  在前面的例子中,每次调用函数Car(),都要创建showcolor(),意味着每个对象都有一个自己的showcolor()方法。

 但是事实上,每个对象都共享了同一个函数。 
  虽然可以在函数外定义方法,然后通过将函数的属性指向该方法。

  function showColor(){ 
  alert(this.color); 
  } 
  function Car(){ 
  var ocar = new Object(); 
  ocar.color = color; 
  ocar.doors = door; 
  ocar.showColor = showColor; 
  return ocar; 

    
[2]工厂方法模式
    来源: 互联网  发布时间: 2013-11-10
概述

工厂方法模式,英文Factorymethod pattern,工厂方法模式是简单工厂模式的进化版, 看本文之间最好先看一下简单工厂模式。工厂方法模式是定义一个创建产品对象的工厂接口,工厂接口本身不去创建对象,而是交给其子类或者是其实现类去创建,将实际创建工作推迟到子类中进行,我们先看一下如何实现工厂方法模式,最后再说一下它有什么好处。

实现

Operation.java,运算基类,抽象getResult方法。

public abstract class Operation {

   protected double numA;

   protected double numB;

   public double getNumA() {

      return numA;

   }

   public void setNumA(double numA) {

      this.numA = numA;

   }

   public double getNumB() {

      return numB;

   }

   public void setNumB(double numB) {

      this.numB = numB;

   }

   public abstract double getResult();

}

 

AddOperation.java,加法运算类,继承自Operation,实现getResult方法。

/* 加法 */

public class AddOperation extends Operation {

   @Override

   public double getResult() {

      return numA + numB;

   }

}

 

SubOperation.java,减法运算类,继承自Operation,实现getResult方法。

/* 减法 */

public class SubOperation extends Operation {

   @Override

   public double getResult() {

      return numA - numB;

   }

}

 

乘法、除法运算类略,可以见简单工厂模式第四章第三节。

 

IFactory.java,创建运算类的工厂接口,包含一个创建运算类的抽象方法。

public interface IFactory {

   Operation createOperation();

}

 

AddFactory.java,加法工厂,实现IFactory,创建加法运算类。

public class AddFactory implements IFactory {

   public Operation createOperation() {

      return new AddOperation();

   }

}

 

SubFactory.java,减法工厂,实现IFactory,创建减法运算类。

public class SubFactory implements IFactory {

   public Operation createOperation() {

      return new SubOperation();

   }

}

 

乘法、除法工厂类略。

 

FactoryMethodTest.java,客户端类。

public class FactoryMethodTest {

   public static void main(String[] args) {

      IFactory factory = new AddFactory();

      Operation operation = factory.createOperation();

      operation.setNumA(1);

      operation.setNumB(2);

      System.out.println(operation.getResult());

   }

}

 

UML

从UML类图中可以看出,工厂方法模式中工厂的个数是和运算类的个数是一样的,也就是说增加一个运算类,就需要增加一个工厂。而简单工厂方法模式中增加一个运算类,需要在静态工厂方法中增加一个判断分支,这样看起来好像工厂方法模式反而麻烦了。现在就得引入软件设计中的一个原则,开放-封闭原则。

原则

软件设计中,有很多设计原则,可能我们并非一定要遵守,但我们一定要尽量遵守,因为这始终是利大于弊的。

开放-封闭原则

针对扩展是开放的,针对修改是封闭的。详细介绍可以见百度百科,开放-封闭原则是面向对象设计的核心所在,遵循这个原则可以带来巨大好处,可扩展、可维护、可复用。再来说简单工厂方法模式,我需要增加一种运算时,需要增加一个新的运算类,这没有错,但是还需要修改工厂方法,增加分支,这就违背了开放-封闭原则,工厂方法模式就是基于其上的遵循开放-封闭原则的解决方案,针对工厂的变化,抽象出来工厂接口,将静态工厂中的每个分支判断都抽成单独的工厂类,这也是前文提到过的将if…else分支判断转

    
[3]struts2标签在显示多级属性的作用
    来源: 互联网  发布时间: 2013-11-10

<s:textfield name="faculty" value="%{#request.updateStudent.classroom.faculty.name}" label="院系" readonly="true"></s:textfield>

说明:request.updateStudent得到的是Student的实例,classroom(Classroom的实例)是Student类的属性,faculty(faculty类的实例)是classroom的属性

作者:zhujiaxing666666 发表于2013-1-13 0:23:40 原文链接
阅读:28 评论:0 查看评论

    
最新技术文章:
▪error while loading shared libraries的解決方法    ▪版本控制的极佳实践    ▪安装多个jdk,多个tomcat版本的冲突问题
▪简单选择排序算法    ▪国外 Android资源大集合 和个人学习android收藏    ▪.NET MVC 给loading数据加 ajax 等待loading效果
▪http代理工作原理(3)    ▪关注细节-TWaver Android    ▪Spring怎样把Bean实例暴露出来?
▪java写入excel2007的操作    ▪http代理工作原理(1)    ▪浅谈三层架构
▪http代理工作原理(2)    ▪解析三层架构……如何分层?    ▪linux PS命令
▪secureMRT Linux命令汉字出现乱码    ▪把C++类成员方法直接作为线程回调函数    ▪weak-and算法原理演示(wand)
▪53个要点提高PHP编程效率    ▪linux僵尸进程    ▪java 序列化到mysql数据库中
▪利用ndk编译ffmpeg    ▪活用CSS巧妙解决超长文本内容显示问题    ▪通过DBMS_RANDOM得到随机
▪CodeSmith 使用教程(8): CodeTemplate对象    ▪android4.0 进程回收机制    ▪仿天猫首页-产品分类
▪从Samples中入门IOS开发(四)------ 基于socket的...    ▪工作趣事 之 重装服务器后的网站不能正常访...    ▪java序列化学习笔记
▪Office 2010下VBA Addressof的应用    ▪一起来学ASP.NET Ajax(二)之初识ASP.NET Ajax    ▪更改CentOS yum 源为163的源
▪ORACLE 常用表达式    ▪记录一下,AS3反射功能的实现方法    ▪u盘文件系统问题
▪java设计模式-观察者模式初探    ▪MANIFEST.MF格式总结    ▪Android 4.2 Wifi Display核心分析 (一)
▪Perl 正则表达式 记忆方法    ▪.NET MVC 给loading数据加 ajax 等待laoding效果    ▪java 类之访问权限
▪extjs在myeclipse提示    ▪xml不提示问题    ▪Android应用程序运行的性能设计
▪sharepoint 2010 自定义列表启用版本记录控制 如...    ▪解决UIScrollView截获touch事件的一个极其简单有...    ▪Chain of Responsibility -- 责任链模式
▪运行skyeye缺少libbfd-2.18.50.0.2.20071001.so问题    ▪sharepoint 2010 使用sharepoint脚本STSNavigate方法实...    ▪让javascript显原型!
▪kohana基本安装配置    ▪MVVM开发模式实例解析    ▪sharepoint 2010 设置pdf文件在浏览器中访问
▪spring+hibernate+事务    ▪MyEclipse中文乱码,编码格式设置,文件编码格...    ▪struts+spring+hibernate用jquery实现数据分页异步加...
▪windows平台c++开发"麻烦"总结    ▪Android Wifi几点    ▪Myeclipse中JDBC连接池的配置
▪优化后的冒泡排序算法    ▪elasticsearch RESTful搜索引擎-(java jest 使用[入门])...    ▪MyEclipse下安装SVN插件SubEclipse的方法
▪100个windows平台C++开发错误之七编程    ▪串口转以太网模块WIZ140SR/WIZ145SR 数据手册(版...    ▪初识XML(三)Schema
▪Deep Copy VS Shallow Copy    ▪iphone游戏开发之cocos2d (七) 自定义精灵类,实...    ▪100个windows平台C++开发错误之八编程
▪C++程序的内存布局    ▪将不确定变为确定系列~Linq的批量操作靠的住...    ▪DIV始终保持在浏览器中央,兼容各浏览器版本
▪Activity生命周期管理之三——Stopping或者Restarti...    ▪《C语言参悟之旅》-读书笔记(八)    ▪C++函数参数小结
▪android Content Provider详解九    ▪简单的图片无缝滚动效果    ▪required artifact is missing.
▪c++编程风格----读书笔记(1)    ▪codeforces round 160    ▪【Visual C++】游戏开发笔记四十 浅墨DirectX教程...
▪【D3D11游戏编程】学习笔记十八:模板缓冲区...    ▪codeforces 70D 动态凸包    ▪c++编程风格----读书笔记(2)
▪Android窗口管理服务WindowManagerService计算Activity...    ▪keytool 错误: java.io.FileNotFoundException: MyAndroidKey....    ▪《HTTP权威指南》读书笔记---缓存
▪markdown    ▪[设计模式]总结    ▪网站用户行为分析在用户市场领域的应用
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3