设计模式 4

本章讲讲第三类和第四类。 19、备忘录模式(Memento) 主要目的是保存一个对象的某个状态,以便在适当的时候恢复对象,个人觉得叫备份模式更形象些,通俗的讲下:假设有原始类A,A中有各种属性,A可以决定需要备份的属性,备忘录类B是用来存储A的一些内部状态,类C呢,就是一个用来存储备忘录的,且只能存储,不能修改等操作。做个图来分析一下: Original类是原始类,里面有需要保存的属性value及创建一个备忘录类,用来保存value值。Memento类是备忘录类,Storage类是存储备忘录的类,持有Memento类的实例,该模式很好理解。直接看源码: public class Original { private String value; public String getValue() { return value; } public void setValue(String value) { this.value = value; } public Original(String value) { this.value = value; } public Memento createMemento(){ return new Memento(value); } public void restoreMemento(Memento memento){ this.value = memento.getValue(); } } public class Memento { private String value; public Memento(String value) { this.value = value; } public String getValue() { return value; } public void setValue(String value) { this....

June 6, 2018 · 4 min · sunbufu

AJax

一、AJax定义 AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术。 AJAX = 异步 JavaScript和XML(标准通用标记语言的子集)。 AJAX 是与服务器交换数据并更新部分网页的艺术,在不重新加载整个页面的情况下。 AJax的优点 页面无刷新 不打断用户的操作,用户的体验好。 按需获取数据,浏览器与服务器之间数据的传输量减少。 是一个标准技术,不需要下载任何的插件。 利用客户端(浏览器)的计算能力。 二、AJax使用 2.1 AJax对象 所有现代浏览器均内建 XMLHttpRequest 对象(IE5 和 IE6 使用 ActiveXObject)。例如:IE7+、Firefox、Chrome、Safari 以及 Opera。 2.1.1 创建对象 var xmlhttp; if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp = new XMLHttpRequest(); } else { // code for IE6, IE5 xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } 2.2 发送数据 AJax对象提供了opean()和send()两个方法,具体差别如下表:...

June 3, 2018 · 2 min · sunbufu

Java反射

一、Java反射 1.1 Java反射的定义 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。 JAVA反射(放射)机制:“程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言”。从这个观点看,Perl,Python,Ruby是动态语言,C++,Java,C#不是动态语言。但是JAVA有着一个非常突出的动态相关机制:Reflection,用在Java身上指的是我们可以于运行时加载、探知、使用编译期间完全未知的classes。换句话说,Java程序可以加载一个运行时才得知名称的class,获悉其完整构造(但不包括methods定义),并生成其对象实体、或对其fields设值、或唤起其methods。 1.2 反射机制的作用: 反编译:*.class–>*.java 通过反射机制访问java对象的属性,方法,构造方法等; 1.3 反射相关类 java.lang.Class; java.lang.reflect.Constructor; java.lang.reflect.Field; java.lang.reflect.Method; java.lang.reflect.Modifier; 二、具体功能实现 2.1 反射机制获取类有三种方法,我们来获取Employee类型 //第一种方式:注意此处的Employee必须是全路径名(包名+文件名) Classc1 = Class.forName("Employee"); //第二种方式: //java中每个类型都有class属性. Classc2 = Employee.class; //第三种方式: //java语言中任何一个java对象都有getClass 方法 Employeee = new Employee(); Classc3 = e.getClass(); //c3是运行时类 (e的运行时类是Employee) 2.2 创建对象:获取类以后我们来创建它的对象,利用newInstance: Class c =Class.forName("Employee"); //创建此Class 对象所表示的类的一个新实例 Objecto = c.newInstance(); //调用了Employee的无参数构造方法. 2.3 获取属性:分为所有的属性和指定的属性: a,先获取所有的属性的写法: //获取整个类 Class c = Class.forName("java.lang.Integer"); //获取所有的属性 Field[] fs = c.getDeclaredFields(); //定义可变长的字符串,用来存储属性 StringBuffer sb = new StringBuffer(); //通过追加的方法,将每个属性拼接到此字符串中 //最外边的public(访问修饰符)定义 sb....

June 3, 2018 · 2 min · sunbufu

Java实现AES加密

一、AES的定义 高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。 二、Java实现AES 2.1加密 /** * 加密 * * @param content 需要加密的内容 * @param password 加密密码 * @return */ public static byte[] encrypt(String content, String password) { try { KeyGenerator kgen = KeyGenerator.getInstance("AES"); kgen.init(128, new SecureRandom(password.getBytes())); SecretKey secretKey = kgen.generateKey(); byte[] enCodeFormat = secretKey.getEncoded(); SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES"); Cipher cipher = Cipher.getInstance("AES");// 创建密码器 byte[] byteContent = content.getBytes("utf-8"); cipher.init(Cipher.ENCRYPT_MODE, key);// 初始化 byte[] result = cipher....

June 3, 2018 · 3 min · sunbufu

JQuery的基本用法

jQuery前言 jQuery是一个兼容多浏览器的javascript库,核心理念是write less,do more(写得更少,做得更多)。 1 向页面添加jQuery库: <script type="text/javascript" src="jQuery.js"></script> 2 jQuery语法: 基础语法是: $(selector).action() 文档就绪函数: $(document).ready(function(){ --- jQuery functions go here ---- }); 一 jQuery选择器 1.1 元素选择器: 方法 作用 $("p") 选取 <p> 元素。 $("p.intro") 选取所有 class="intro" 的 <p> 元素。 $("p#demo") 选取所有 id="demo" 的 <p> 元素。 1.2 属性选择器: 方法 作用 $("[href]") 选取所有带有 href 属性的元素。 $("[href='#']") 选取所有带有 href 值等于 “#” 的元素。 $("[href!...

June 3, 2018 · 3 min · sunbufu