状态模式(State Pattern)是一种较为复杂的行为型模式。它用于解决系统中复杂对象的状态转换以及不同状态下行为的封装问题。当系统中某个对象存在多个状态,这些状态之间可以进行转换,而且对象在不同状态下行为不相同时可以使用状态模式。状态模式将一个对象的状态从该对象中分离出来,使得其状态可以灵活变化,且对于客户端来说,用户无需关心对象状态的转换以及对象所处的当前状态,无论对于何种状态的对象,客户端都可以一致处理。
类比:
环境类
public class Context {
private State state; //维持一个对抽象状态对象的引用
private int value; //其他属性值,其变化可能会导致对象的状态变化
public void setState(State state) {
this.state = state;
}
public void request() {
…
state.handle( ); //调用状态对象的业务方法
}
}
抽象状态类
public abstract class State {
//声明抽象业务方法,不同的具体状态类可以有不同的实现
public abstract void handle( );
}
具体状态类
public class ConcreteState extends State {
public void handle( ) {
//方法具体实现代码
}
}
本文来自博客园,作者:街酒,转载请注明原文链接:http://www.cnblogs.com/sorrymine/p/17421631.html
大家好,又见面了,我是你们的朋友全栈君。Windows下配置Tomcat环境很easy了,那么在Mac下怎么配置Tomcat环境变量呢?首先我们到Tomcat官网上下载tomcat压缩包我下载的是apache-tomcat-7.0.64http://tomcat.apache.org/download-70.cgi下载好了之后放到我们想放的目录下面我放的是/Users/xxx/Documents/work/java/apache-tomcat-7.0.64然后我们打开终端把我们的tomcat路径配置进去输入open.bash_profileexportPATH=$PATH:/Users/xxx/Documents/work/java/apache-tomcat-7.0.64/bin source一下然后进入到我们的tomcat/bin目录下输入startup.sh看到Tomcatstarted字样的就说明我们成功启动了如果出现permissiondefined字样说明你没有权限操作.sh文件那么在终端中输入sudochmod755/Users/xxx/Documents/work/ja
关于nth-child的疑惑由Ghostzhang发表于2015-04-2023:20今天在CSS森林群有同学问了个问题:【活跃】ζ”綉;財ヾnth-child怎么选前三个【活跃】Davin:nth-child(-n+3)【吐槽】鬼-CSSForest+4 正好很久没写代码了,也想试试回答下这个问题,于是就搜索了下,于是就找到了W3School的CSS3:nth-child()选择器,看到了这样一个代码:p:nth-child(-n+3){ background:#ff0000; }复制效果展示感觉有点奇怪,我原本以为应该会是前三个段落被选中,像这样:效果展示一定是哪里不对了。来看看它的说明::nth-child(n)选择器匹配属于其父元素的第N个子元素,不论元素的类型。n可以是数字、关键词或公式。 MSN文档对:nth-child的说明:伪类:nth-clild(an+b)匹配在文档树中前面有an+b-1个兄弟元素的元素,此时n大于或等于0,并且该元素具有父元素。简而言之,该选择器匹配多个位置满足an+b的子元素。 span:nth-child(-n+3)匹配前三个子元素中的spa
本文讲的是关于在uwp使用json的简单使用,json应用很多,因为我只是写简单使用,说的东西可能不对或者不符合每个人的预期。如果觉得我有讲的不对的,就多多包含,或者直接关掉这篇文章,但是请勿生气或者发怒吐槽,可以在我博客评论http://blog.csdn.net/lindexi_gd现在很多应用都是使用json如果我们拿到一段json,想要把它变为我们C艹艹可以用的,我们需要先对json的类进行转换,其实很简单,我们在复制一段json不需要我们对这json转换为类,如果需要手动写很容易写错。因为我们有vs,在我们的编辑,可以看到粘贴为类,这个功能在VisualStudio2017是没有的,需要安装插件。我们复制完一段json,然后点击粘贴,就好了,自动生成对应的类,不过类的命名有些奇怪。如果我们拿到一段json,请看下面{ "results": [ { "location": { "id":"WX4FBXXFKE4F", "name":"北京", "co
Launch是Kickstarter风格的Shopify主题,旨在将初创公司变成成功的商店。展示细节并讲述您的产品故事。支持OS2.0,适合健康与美容,家庭与园艺,运动与休闲等行业使用LaunchShopify主题特色快速打造美店渴望与世界分享您的小型或单一产品线?这个主题的无忧设计将帮助您快速推出精美的商店。爱上您的产品Launch具有独特的功能,有助于提高预售率,启动kickstarter活动,并促进产品和品牌教育。一切都与细节有关通过在产品页面和主页中显示技术规格和产品详细信息,为客户提供所需的信息。针对小型目录进行了优化Launch专为单一产品和小型目录商店而构建,能够随着业务的增长而扩展。独特的目标跟踪功能通过Launch的Kickstarter风格的众筹功能激发客户并讲述您的品牌故事。可自定义的颜色渐变自定义Launch的标志性颜色渐变,以匹配您的品牌和风格。以产品为中心启动可让您轻松地在主页和产品页面上突出显示产品功能。技术规格直接在您的特色产品页面上显示技术规格,以建立与客户的信任。团队成员通过在
整理|AI科技大本营(ID:rgznai100)想入门Python,但一直没找到合适的参考书籍?《ThinkPython》是很多Python初学者的不二入门教材,受到广泛好评。该书原作者是美国Olin工程学院的教授AllenB.Downey,目前该书的原版和中文版本都已免费开源。Allen称,《ThinkPython》是面向Python编程初学者的入门书籍。该书从编程的基本概念开始,经过精心设计,可以在首次使用时定义所有术语,并按照逻辑顺序发展介绍每个新概念。其中,较大的内容部分(如递归和面向对象的编程)都划分为一系列较小的步骤进行介绍。中文版本译者是一名自学Python的编程爱好者。选择翻译《ThinkPython》,一是因为它是作者入门使用的第一本教材;二是,它确实非常浅显易懂,把很多概念用非常朴实的话进行解释。作者称,当时零基础学习Python的他看这本书没有大的障碍。当然,这和作者在设计、编写此书时的出发点密不可分。目前,这本书已经更新到了Python3版本。以下是这本书的基本目录设置。作者在前言里特意提及了《ThinkPython》的一些值得关注的内容设置:我在每章的最后新增
来自:菜鸟教程(微信号:runoob)1、JavaScript错误处理的正确姿势 这个代码毫无破绽啊!!! try{ something }catch(e){ window.location.href="https://stackoverflow.com/search?q=[js]+"+ e.message; }复制2、可能是世界上最难的helloworld了? 这个要怎么敲出来!!!/* *提示:该行代码过长,系统自动注释不进行高亮。一键复制会移除系统注释 *([]+[][(![]+[])[!+[]+!![]+!![]]+([]+{})[+!![]]+(!![]+[])[+!![]]+(!![]+[])[+[]]][([]+{})[!+[]+!![]+!![]+!![]+!![]]+([]+{})[+!![]]+([][[]]+[])[+!![]]+(![]+[])[!+[]+!![]+!![]]+(!![]+[])[+[]]+(!![]+[])[+!![]]+([][[]]+[])[+[]]+([]+{})[!+[]+!![]+!![]+!![]+!![]]+(
安装1.开发环境InstallthedevelopmentfilesforlibrariestobeusedduringthebuildingofthePythonmodules:aptinstalllibxml2-devlibxslt-devlibfreetype6-devlibjpeg-devlibz-devlibyaml-devpython3-devbuild-essential复制2.虚拟环境Installpipandvirtualenv.UsuallytheyareshippedbyyourdistributionorwithPython:aptinstallpython3-pippython3-virtualenvvirtualenv复制3.创建虚拟环境CreateandactivatevirtualenvforWeblate:virtualenv--python=python3~/weblate-env复制4.激活虚拟环境ActivatethevirtualenvforWeblate,soWeblatewilllookforPythonlibrariestherefirs
0.前言作为一个不喜欢写样式的前端,遇到了直接对外的活动页面的需求,一下炸出一堆问题:单位乱用,rem、vh、vw、px乱用甚至混在一起用html冗余,有时候一个div只是为了取margin一个页面用多种布局方案,flex、float、relative+top、absolute+top、margin,自己坑自己各种随意,不严格按照视觉稿理论倒是熟悉,但用起来还是一塌糊涂。于是,回头自我救赎一波,好好复习基础。flex、grid后面不多作研究,尤其是grid这种一两行就可以搞定很多复杂样式。如果我们不知道新技术是为了什么而来的,解决什么痛点,没有体验一下刀耕火种的时代,又没有一个良好的团队合作能力,做起项目来还真的不一定是“写页面太简单了”这种事情。1.一些实践方案深入浅出1.1padding看到百度的顶部,你会想到什么方案呢?我们看百度搜索的顶部,顶部的#head(搜索框这一行都是)是fixed的,紧接着的那个div是一个tab。当然fixed脱离文本流,就用padding把自己的主要内容顶到下面去,不然内容就直接置顶了。没错,就是很简单的一个css,实现的方法有很多。然后我们再看一下
https://juejin.im/user/5978b281f265da3e292a3d1c/activities这次准备开启一个新的系列来写了,聊聊分布式系统中的关注点。节奏不会排的太紧凑,计划两周一更吧。 本文是本系列的第一篇。从普遍认为的分布式系统中最最最重要的数据一致性开始。内容适合人群>=0年技术相关经验。一、为什么需要分布式系统?任何事物能够被持续的运用和发展,必然有其价值,分布式系统也是一样。分布式系统的产生我认为主要的目的就是“快”和“海量”。这个“快”可以分为两个方面:第一个是系统的处理速度快。 第二个是开发的速度快(历时短)。 这2点本质都是相同的,把一个动作或者一件事情拆成两部分或者多个部分去同时进行,使得整体的耗时缩短。比如:原本一件事情要一个人做的话要两分钟。那么我雇佣两个人帮我各自做一部分,那么最理想情况下一分钟就可以完成了。当然这两个方面中第二项从某种意义上来说是可以克服的,但是第一项是无法克服的。因为没有一个程序或者说一台计算机,它的性能是无穷大的,如果有,那分布式系统也不会像现在这么普遍了(很多时候用钱能解决的问题都不是问题了)。“海量”则是由
单例设计模式:(1)设计模式:解决某类问题行之有效的方法,是一种思想,是规律的总结 (2)用来保证某个类在内存中只有一个对象 (3)保证唯一性的思想及步骤: 为了避免其他程序建立该类对象,先禁止其他程序建立该类对象,即将构造函数私有化为了其他程序访问到该类对象,须在本类中创建一个该类私有对象为了方便其他程序访问到该类对象,可对外提供一个公共访问方式。 比如API中的Runtime类就是单例设计模式。单例设计模式的两种方式 A:饿汉式当类加载的时候,就创建对象。classStudent{ privateStudent(){} privatestaticfinalStudents=newStudent(); publicstaticStudentgetInstance() { returns; }}B:懒汉式当使用的使用,才去创建对象。classStudent{ privateStudent(){} privatestaticfinalStudents=null; publicstaticStudentgetInstance() { if(s==null) { //线程1就进来了
Hbase原理、基本概念、基本架构概述HBase是一个构建在HDFS上的分布式列存储系统;HBase是基于GoogleBigTable模型开发的,典型的key/value系统;HBase是ApacheHadoop生态系统中的重要一员,主要用于海量结构化数据存储;从逻辑上讲,HBase将数据按照表、行和列进行存储。与hadoop一样,Hbase目标主要依靠横向扩展,通过不断增加廉价的商用服务器,来增加计算和存储能力。Hbase表的特点大:一个表可以有数十亿行,上百万列;无模式:每行都有一个可排序的主键和任意多的列,列可以根据需要动态的增加,同一张表中不同的行可以有截然不同的列;面向列:面向列(族)的存储和权限控制,列(族)独立检索;稀疏:空(null)列并不占用存储空间,表可以设计的非常稀疏;数据多版本:每个单元中的数据可以有多个版本,默认情况下版本号自动分配,是单元格插入时的时间戳;数据类型单一:Hbase中的数据都是字符串,没有类型。Hbase数据模型Hbase逻辑视图注意上图中的英文说明 Hbase基本概念RowKey:是Bytearray,是表中每条记录的“主键”,方便快速查找,
SpringCloudAlibaba微服务架构实战派(上下册)出版了PICKOFTHEWEEK本书聚焦于SpringCloudAlibaba微服务架构实战,全面分析了基于SpringCloudAlibaba的微服务架构全栈技术原理。那咱们开始SpringCloudAlibaba之旅吧,Go、Go还是Go!写书缘由在写这本书之前,我先后在两家杭州的“独角兽”公司担任技术负责人,并推进公司核心业务的“中台化”改造。在落地业务中台和技术中台的过程中,督促并指导开发人员统一使用SpringCloudAlibaba作为中台服务最底层的基础框架。为了快速推进业务服务SpringCloudAlibaba化的进度,我冲在业务的第一线,收集和整理开发人员在使用SpringCloudAlibaba过程中反馈的技术问题,并提供有效的技术解决方案,直至项目落地。我每周都会做技术复盘,通过分析大量的问题总结出一个结论:开发人员反馈的问题大部分都是由于SpringCloudAlibaba使用不合理所造成的。也就是说,很多开发人员并不了解SpringCloudAlibaba的原理及如何落地实践。于是,我就产生了把我
学习是一件需要长期投入的事情,尤其是在当下大环境恶劣的背景下,我们程序员必须要多多的投资自己,去加强自己的技术硬实力和软实力。2022年8月11日晚7点,小米十二周年,雷军年度演讲“永远相信美好的事情即将发生”如约而至。在近三小时的发布会中,雷军讲述了他人生中多次经历的挫折与迷茫,并分享了穿越人生低谷的感悟。发布会上,雷军为大家带来了小米MIXFold2、小米Buds4Pro、小米WatchS1Pro、小米平板5Pro12.4、RedmiK50至尊版等重磅新品。还有更让人惊喜的OneMoreThing:小米自动驾驶技术和CyberOne全尺寸人形仿生机器人。此外,雷军还宣布了「小米科技生态」的全新理念,小米正在构建不断延展的科技场景,并提供了丰富的智能终端和服务。围绕人的生活和工作,更好为人服务,紧密连接人和万物。以下是雷军百度直播视频的链接,大家可以自行去观看一下,干货非常多。https://live.baidu.com/m/media/pclive/pchome/live.html?type=live&action=liveshow&room_id=75884838
在终端输入appium-doctor检查环境 报错:Errorrunningxcrunsimctl 如下图: 这个是由于Xcode没有选择版本号导致的 解决方案: 1、这个是Xcode的问题,Xcode安装之后,simctl可以用xcrun命令来执行; 打开Xcode-->Preferences-->Locations-->CommandLineTools选择版本号就可以了 作者:百年成说 链接:https://www.jianshu.com/p/e9706a2ebdbb 来源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 优秀不够,你是否无可替代 软件测试交流QQ群:721256703,期待你的加入!! 欢迎关注我的微信公众号:软件测试君
声明:本文为原创文章,如需转载,请注明来源并保留原文链接前端小尚,谢谢! 作用 数据有效性验证 替换文本 提取文本 声明方式 字面量的声明方式 示例:varre=/a/gi; RegExp声明方式 varre=newRegExp();//RegExp是一个对象,和Aarray一样 //但这样没有任何效果,需要将正则表达式的内容作为字符串传递进去 re=newRegExp("a");//最简单的正则表达式,将匹配字母a re=newRegExp("a","i");//第二个参数,表示匹配时不分大小写 复制 RegExp构造函数第一个参数为正则表达式的文本内容,而第二个参数则为可选项标志.标志可以组合使用,两个参数都是字符串。 创建这个字符串时要多加小心,因为反斜杠在正则表达式和在字符串字面量中有一些不同的含义。通常需要双写反斜杠,以及对引号进行转义。(表现在低版本浏览器上) varstr='a/b\\c'; varreg=/^a\/b\\c$/; document.write(str+'<br/>');//==>a/b\c document.wr
Am335x的时钟结构分为:ADPLLS和ADPLLLJ 1、ADPLLS用来配置Core_CLK,Dispaly_clk,ARM系统CLK(mpu_clk),DDRPLLs_clk 2、ADPLLLJ用来为am335x的外设配置时钟 Core_clk的配置: 通过寄存器CM_CLKSEL_DPLL_CORE配置参数M,N来设置CLKDCOLDO的输出,在通过配置寄存器CM_DIV_M4_DPLL_CORE,CM_DIV_M5_DPLL_CORE,CM_DIV_M6_DPLL_CORE来配置CORE_CLKOUTM4,CORE_CLKOUTM5,CORE_CLKOUTM6的输出。 例如:master_osc的输出为24MhZ,要得到CLKDCOLDO=10MHZ,由下表知:CLKDCOLDO=2*[M/(N+1)]*CLKINP(master_osc),得出M=50,N=23 根据图8-10可的出CORE_CLKOUTM4=100/M4, CORE_CLKOUTM5=100/M5 CORE_CLKOUTM6=100/M6 进而可相继得
转载自http://www.searchsoa.com.cn/showcontent_79099.htm 在几年的时间里,Node.JS逐渐发展成一个成熟的开发平台,吸引了许多开发者。有许多大型高流量网站都采用Node.JS进行开发,像PayPal,此外,开发人员还可以使用它来开发一些快速移动Web框架。 除了Web应用外,NodeJS也被应用在许多方面,本文盘点了NodeJS在其它方面所开发的十大令人神奇的项目,这些项目涉及到应用程序监控、媒体流、远程控制、桌面和移动应用等等。 1.NodeOS NodeOS是采用NodeJS开发的一款友好的操作系统,该操作系统是完全建立在Linux内核之上的,并且采用shell和NPM进行包管理,采用NodeJS不仅可以很好地进行包管理,还可以很好的管理脚本、接口等。目前,Docker和Vagrant都是采用NodeOS的首个版本进行构建的。 2.Noduino 许多硬件黑客希望通过Web页面即可控制他们的Arduino,Noduino就是这样的一个项目,一个简单灵活的JavaScript和NodeJS框架,通过使用HTML5、Socket.IO
一、概述 今天在看js的时候发现里面的代码基本上都是用querySelector()和querySelectorAll()来获取元素,就有点疑惑为什么不用getElementById(),可能也是因为自己没用过那两个,所以并不清楚原因所在。 参考手册上写querySelector()方法返回文档中匹配指定CSS选择器的一个元素,并且其语法document.querySelector(CSSselectors)接收的参数,可以指定一个或多个匹配元素的CSS选择器,可以使用它们的id,类,类型,属性,属性值等来选取元素,对于多个选择器,使用逗号隔开,返回一个匹配的元素。 而且既然都可以实现元素的获取,而且都可以通过id、类等等来获取,为什么我们时常用的都是getElementById(),getElementsByClassName()而非那两个? 二、有关getElement(s)Byxxxx的用法 (1)getElementById() 该方法将返回一个与之对应id属性的节点对象,它是document对象特有的函数,只能通过其来调用该方法。 (2)ge
--http://www.5idev.com/p-php_preg_match.shtml 正则表达式在PHP中的应用 在PHP应用中,正则表达式主要用于: 正则匹配:根据正则表达式匹配相应的内容 正则替换:根据正则表达式匹配内容并替换 正则分割:根据正则表达式分割字符串 在PHP中有两类正则表达式函数,一类是Perl兼容正则表达式函数,一类是POSIX扩展正则表达式函数。二者差别不大,而且推荐使用Perl兼容正则表达式函数,因此下文都是以Perl兼容正则表达式函数为例子说明。 定界符 Perl兼容模式的正则表达式函数,其正则表达式需要写在定界符中。任何不是字母、数字或反斜线()的字符都可以作为定界符,通常我们使用/作为定界符。具体使用见下面的例子。 提示 尽管正则表达式功能非常强大,但如果用普通字符串处理函数能完成的,就尽量不要用正则表达式函数,因为正则表达式效率会低得多。关于普通字符串处理函数,请参见《PHP字符串处理》。 preg_match() preg_match()函数用于进行正则表达式匹配,成功返回1,否则返回0。 语法: intpreg_match(s
功能需求如下: 这是一个网上在线购物系统(B2C)。 系统需要提供网上购物的功能。用户能够随意浏览商品,并能获取商品的详细信息,如图片预览、 商品描述等。 系统能够向用户提供一些浏览信息,让用户能够快速的了解系统 出售商品信息,如特价促销,店长推荐,排行榜,新上架商品等。 系统能够提供3级分类商品。 系统能够提供品牌分类。 系统能够提供公告信息,让用户快速了解系统的通告信息。 系统能够提供论坛的方式,供用户发表对商品的评论的功能。 系统能够提供搜索功能,让用户快速了解他需要的产品。 用户在浏览3级分类商品的时候,需要体统高级筛选功能,如不 同方式浏览商品信息、按价格排序商品,按规格浏览商品等功能。 用户购物需要注册成为本系统的会员,并能随时修改自己的信息 (如收货信息等)。 会员能够收藏自己喜欢的商品,并能随时注重该商品。 会员能够查看已购买的商品。 会员能够完成与论坛的相关功能。 总结:通过实战,发现自己学得不是自己想象的那么好,有些功 能还是做不出来。通过新豆商城项目,发现自己的不足,跟同事之间 的交流中,能学到很多新知识。简单的总结为几个字,那就是:多看, 多问,多观察,多思考!