content

架构师内功心法,参与富文本编辑器开发的备忘录模式详解

☆樱花仙子☆ 提交于 2020-03-22 13:02:22
3 月,跳不动了?>>> 备忘录模式(Memento Pattern)又称为快照模式(Snapshot Pattern)或者令牌模式(Token Pattern),是指在不破坏封装的前提下,捕获一个内部状态,并在对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。 在软件系统中,备忘录模式为我们提供了一种“ 后悔药 ”的机制,它通过存储系统各个历史状态的快照,使得我们可以在任意时刻将系统回滚到某一个历史状态。 一、备忘录模式的应用场景 我们机会天天都在使用备忘录模式,比如使用Git、SVN提供一种代码版本撤回的功能。还有游戏的存档功能,通过将游戏当前进度存储到本地文件系统或数据库中,使得下次继续游戏时,玩家可以从之前的位置继续进行。 备忘录模式适用于以下两个场景: 需要保存历史快照的场景; 希望在对象之外保存状态,且除了自己其它类对象无法访问状态保存具体内容。 备忘录模式主要包含三种角色: 发起人角色(Orgainator):负责创建一个备忘录,记录自身需要保存的状态,具备状态回滚功能; 备忘录角色(Memento):用于存储发起人的内部状态,且可以防止发起人以外的对象进行访问; 备忘录管理员(Caretaker):负责存储,提供管理备忘录,无法对备忘录内容进行操作和访问。 1.1 利用压栈管理落地备忘录模式 我们在网页上写文章或者博客都使用过富文本编辑器

标准 DOM 盒模型 与 IE 盒模型

僤鯓⒐⒋嵵緔 提交于 2020-03-22 10:33:47
包括四个部分:margin>border>padding>content 在标准DOM盒模型中,dom 的 width 和 height 仅作用于content (IE6 及早期版本的IE7 下 width 和 height 包括了 border 和 padding) 因此,一个html元素占据的空间不是width和height,而是这四个部分的加总, 另外,由于margin没有内容无法看到(相邻元素都有margin时,你无法凭肉眼确定 dom 占据范围的边界),如果你设置了border,那么肉眼所见的 DOM 形状就是border>padding>content三项的加总, 但是,所占据的空间仍是四项的加总。 使用标准盒模型的文档渲染模式有: document.compatMode = "CSS1Compat" 非标准模式(quirke) 下: document.compatMode = "BackCompat" 为了使用 IE 浏览器使用标准模式,可以使用下面的做法: 1、添加文档声明 <!DOCTYPE html> 2、 < meta http-equiv="X-UA-Compatible" content=" IE =edge, chrome=1"> outline 属性:盒模型的outline属性是包围在border外面的边线,设置方法跟border一样

PHP生成静态网页的方法

两盒软妹~` 提交于 2020-03-22 08:45:51
  看到很多朋友在各个地方发帖问PHP生成静态文章系统的方法,以前曾做过这样一个系统,遂谈些看法,以供各位参考。兄弟先带大家回顾一些基本的概念。   一,PHP脚本与动态页面。   PHP脚本是一种服务器端脚本程序,可通过嵌入等方法与HTML文件混合,也可以类,函数封装等形式,以模板的方式对用户请求进行处理。无论以何种方式,它的基本原理是这样的。由客户端提出请求,请求某一页面 -----> WEB服务器引入指定相应脚本进行处理 -----> 脚本被载入服务器 -----> 由服务器指定的PHP解析器对脚本进行解析形成HTML语言形式 ----> 将解析后的HTML语句以包的方式传回给浏览器。由此不难看出,在页面发送到浏览器后,PHP就不存在了,已被转化解析为HTML语句。客户请求为一动态文件,事实上并没有真正的文件存在在那里,是PHP解析而成相对应的页面,然后发送回浏览器。这种页面处理方式被称为“动态页面”。   二,静态页面。   静态页面是指在服务器端确实存在的仅含HTML以及JS,CSS等客户端运行脚本的页面。它的处理方式是。由客户端提出请求,请求某一页面 ----> WEB服务器确认并载入某一页面 ----> WEB服务器将该页面以包的形式传递回浏览器。由这一过程,我们对比一下动态页面,即可方现。动态页面需由WEB服务器的PHP解析器进行解析,而且通常还需连接数据库

备忘录模式

纵然是瞬间 提交于 2020-03-21 01:19:57
3 月,跳不动了?>>> 又称为快照模式或令牌模式, 是指在不破坏封装的前提下, 捕获一个对象的内部状态, 并在对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态 特征: 后悔药;属于行为型模式 使用场景 1、需要保存历史快照的场景 2 希望在对象之外保存状态, 且除了自己其他类对象无法访问状态保存具体内容 public class Memento { private String state ; public Memento (String state) { this . state = state ; } public String getState () { return state ; } public void setState (String state) { this . state = state ; } } public class Originator { private String state ; public String getState () { return state ; } public void setState (String state) { this . state = state ; } /** * 创建一个备忘录 * @return */ public Memento createMemento () { return

理解并使用.NET 4.5中的HttpClient

旧巷老猫 提交于 2020-03-20 23:49:25
HttpClient介绍 HttpClient是.NET4.5引入的一个HTTP客户端库,其命名空间为System.Net.Http。.NET 4.5之前我们可能 使用 WebClient和HttpWebRequest来达到相同目的。但是有几点值得关注: 可以 使用 单个HttpClient实例发任意数目的请求 一个HttpClient实例不会跟某个HTTP服务器或主机绑定,也就是说我们可以用一个实例同时给www.a.com和www.b.com发请求 可以继承HttpClient达到定制目的 HttpClient利用了最新的面向任务模式,使得处理异步请求非常容易 异步HTTP GET 下面是一个 使用 HttpClient进行HTTP GET请求数据的例子: class HttpClientDemo { private const string Uri = "http://api.worldbank.org/countries?format=json"; static void Main(string[] args) { HttpClient httpClient = new HttpClient(); // 创建一个异步GET请求,当请求返回时继续处理 httpClient.GetAsync(Uri).ContinueWith( (requestTask) => {

Struts2之ajax初析

不羁岁月 提交于 2020-03-20 20:07:36
Web2.0的随波逐流,Ajax那是大放异彩,Struts2框架自己整合了对Ajax的原生支持(struts 2.1.7+,之前的版本可以通过 插件 实现),框架的整合只是使得JSON的创建变得异常简单,并且可以简单的融入到Struts2框架中,当然这只是在我们需要JSON的时候才会显得流光溢彩。 首先不谈Struts2的原生支持,我们自己写一个ajax示例,使用异步请求,直接请求action动作: InfoAction.java package cn.codeplus.action; import com.opensymphony.xwork2.ActionSupport; public class InfoAction extends ActionSupport { private static final long serialVersionUID = 1359090410097337654L; public String loadInfo() { return SUCCESS; } } InfoAction仅仅是简单的返回"success"。 index.jsp <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>">

EasyUi 修改主题色,修改皮肤

荒凉一梦 提交于 2020-03-20 10:09:49
我的工程是.net的mvc框架 简单修改~~ 不搞那么的复杂 我的jquery-easyui版本是1.3.1呵呵 我的jquery-easyui包放在了Content目录下面 第一步: 下载easyui的主题,官网上去下,或者第三方兼容easyui的。。。都可以。。。下载好了。。。。就把主题放在 ..\Content\jquery-easyui-1.3.1\themes 这个文件夹下面 我就加了一些主题。。。。。。。 第二步: 在我的工程中。。。 引用js的地方修改: @*--------------------应用easyUI的CSS文件---------------------*@ <link href="../../Content/jquery-easyui-1.3.1/themes/icon.css" rel="stylesheet" /> @*<link href="../../Content/jquery-easyui-1.3.1/themes/ default/ easyui.css" rel="stylesheet" />*@ <link href="../../Content/jquery-easyui-1.3.1/themes/ metro-blue /easyui.css" rel="stylesheet" /> 红色字体部分。。。。修改成 \themes

Django 进阶杂记

女生的网名这么多〃 提交于 2020-03-20 09:50:18
数据导入 将文件内容导入,下面是3种方式。 # blogs.txt文件 title 1****content 1 title 2****content 2 title 3****content 3 title 4****content 4 title 5****content 5 title 6****content 6 title 7****content 7 title 8****content 8 title 9****content 9 def main (): file = open('blogs') for line in file: title ,content = line.split('****') Blogs.objects.get_or_create(title=title,content=content)#这样写会避免重复,但效率会慢些 file.close() def main(): file = open('blogs') blogList=[] for line in file: title ,content = line.split('****') blog = Blogs(title=title,content=content)#创建Blogs对象 blogList.append(blog) file.close() Blogs.objects

SSH框架的简化(struts2、spring4、hibernate5)

孤人 提交于 2020-03-18 08:24:19
目的 :     通过对ssh框架有了基础性的学习,本文主要是使用注解的方式来简化ssh框架的代码编写。 注意事项:    1、本文提纲:本文通过一个 新闻管理系统的实例 来简化ssh框架的代码编写,功能包括查询数据库中所有新闻信息,删除某条新闻信息。   2、本项目的搭建环境: Windows 8-64位,Eclipse(开发工具),jdk1.8.0_91,Tomcat 8.0,struts-2.3.30-apps,spring-framework-4.2.2.RELEASE,hibernate-release-5.2.2.Final,mysql数据库 第一步: 在eclipse(开发工具)里创建web项目(项目名称:news),并生成web.xml文件。 第二步: 导入本次项目要使用到的jar包(struts2、spring4、hibernate5和mysql)。 第三步: 在配置文件web.xml配置一个struts2的过滤器和spring监听器。 1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation

DOM节点操作

只谈情不闲聊 提交于 2020-03-18 01:16:06
DOM中有一个非常重要的功能,就是节点模型,也就是DOM中的“M” 。页面中的元素结构就是通过这种节点模型来互相对应着的,我们只需要通过这些节点关系,可以创建、 插入、替换、克隆、删除等等一些列的元素操作。 创建节点 为了使页面更加智能化,有时我们想动态的在html结构页面添加一个元素标签,那么在插入之前首先要做的动作就是:创建节点。 html代码如下: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>DOM节点操作</title> <script type="text/javascript" src="jquery-1.12.3.js"></script> <script type="text/javascript" src="demo.js"></script> <link rel="stylesheet" type="text/css" href="style.css" /> </head> <body> </body> </html> 创建一个节点: var box = $("<div id='box'>节点</div>"); //创建节点 将节点插入到<body>元素内部: $("body").append(box); //插入节点 插入节点 在创建节点的过程中,其实我们已经演示怎么通过.append