摄影

css实现强制不换行/自动换行/强制换行

css换行的一点小技巧 强制不换行div{white-space:nowrap;}自动换行div{word-wrap: break-word;word-break: normal;}强制英文单词断行div{word-break:break-all;}

代码设计的几个基本原则【转载】

原文网址:http://www.cnblogs.com/mailingfeng/archive/2012/09/13/2683246.htmlOCP(Open-Close Principle)开闭原则 Software entities should be open for extension,but closed for modification,(在设计一个模块的时候,应当使这个模块可以在不被修改的前提下扩展)。 对扩展开放open,对修改关闭close。 如何实现? 1.抽象化是关键 2.对可变性的封装原则(Principle of Encapsulation of Variation EVP)。 3.对可能的拓展预留接口 备注: 1) 对于抽象化, 我的理解是, 接口是相对稳定的, 实现是根据需求多变的. 对于大多数可能预料的变化点, 我们可以抽取出共性或者常态点, 进行接口的封装, 而选择不同的实现类嵌入模块, 从而达到可扩展的作用. 2) 对于某个业务点, 可能以后有多种介入处理的情况, 那么这时候可以将业务抽象成事件(event)接口和监听器(listener)接口, 不同的处理需求生成不同的listener, 接入模块的listener收集器, 从而得到业务点的介入机会. 最后达到功能的扩展. 典型容易理解的例子,工厂模式。当需要新增加一个类的时候,直接继承product接口就可以了 , 由工厂类来组装产生需要的product, 而不用大范围修改原有代码。OCP~Liskov Subsitution Principle(LSP)里氏代换原则 就是子类可以代替父类出现的任何地方,在抽象的时候,重要的要理解的一个地方两个类之间是什么关系,是“has-A”?还是“Is-a”的关系。在 “has-a”的关系中,两个类存在的是依赖的关系(在类A里面存在类B的的变量);在“Is-a”的关系中,可以提取这两个类的“共同代码”放在抽象类 C中,然后A,B继承与C,这也是一种重构。Dependency Inversion Principle(DIP)依赖倒转原则 就是在我们编程的时候方法的参数类型,变量,对于其他具体类的依赖,我们尽量的使用抽象类 。 就是说尽量依赖于抽象,而不是依赖于实现。 在书中两种表述: (1),Abstraction should not depend on details.details should depend on abstraction. (抽象不应当依赖于细节,细节应当依赖于抽象)。Abstraction就像是建筑物的基础,而其实现类就是在基础上面一层一层的往上面走。你拆掉最上面 那层,和拿走最下面的基础,有什么不同了,这就是差异了。所以Abstraction是要相当的稳定,是维护的重点。也正是因为稳定,所以我们尽量的依赖 于Abstraction,既是稳定系统,也是灵活系统。 (2),Program to an Interface,not an implementation(要针对接口编程,不要针对实现编程) 应当使用java接口和抽象java类进行变量的类型声明,参数的类型声明,方法返回值的类型和数据类型的转换。 备注: 依赖倒转原则的作用在于多模块或者类间有统一的"知识", 都知道有这个接口, 都知道这个接口是这样用,会返回什么数据. 至于最初的实现类是什么, 只有提供该接口功能的实现类自己关心, 其他模块或者类只管用就行了. 即使以后需求更改, 实现会换成别的一个, 其他模块和类也无需修改代码. 例如A模块提供了一个接口是: List getProducts() 而B和C会使用该模块, 他们只知道这个方法就会返回List , 他们知道List和Product代表什么. 但他们不会管你的接口内部是使用List list = new ArrayList() , 还是List lis = new LinkedList() 或者具体的Product是什么(可能是衣服,鞋子等)Interface Segregation Principle(ISP)接口隔离原则 限制一个实体对另一个实体通信时候的宽度。 就是一个类对另外一个类依赖的时候,应当是建立在最小的接口上面。对于接口隔离原则来说,有两种接口,一种是真正意义上面的“java 接口”Interface;另外一种是指一个类的方法的集合。对于这来两种有,两个接口隔离的原则,对于一个类里面的方法的集合的接口隔离,我们称作是 “角色隔离原则”;另外一种叫做“定制服务”。 定制服务,就是一个类,我给你这个客户端一些方法,我放在一个java接口(Interface)里面。给另外一个客户端另外一些方法,放在另外一个接口(Interface). 角色隔离原则,是指客户端要多个不同的类的方法,我们就搞几个不同类别的接口(Interface),在书中,这么比喻的,就相当于电影剧本里面的人物,我们找人来演,这个人就是具体的类。这就叫做角色隔离原则。Composition/Aggregation Reuse Principle(CARP)组合/聚合复用原则 就是说要尽量的使用合成和聚合,而不是继承关系达到复用的目的。 其实这里最终要的地方就是区分“has-a”和“is-a”的区别。相对于合成和聚合,继承的缺点在于:父类的方法全部暴露给子类。父类如果发生变化,子类也得发生变化。聚合的复用的时候就对另外的类依赖的比较的少。Least Knowledge Principle(LKP)最少知识原则,又称为“Law of Demeter”迪米特原则。 和ISP接口隔离原则一样,限制类与类之间的通信。ISP限制的是宽度,而LoD迪米特原则限制的是通信的广度和深度。 LoD在广度上面,尽量减少远距离类的关联,而使用与自己有关的类,并且也与远距离类有关的类。 可是这种做法有一点麻烦。多个远距离类产生关联的时候,不怎么容易处理,所以增加一个远距离类的抽象类。所有的远距离类都是通过抽象类的形式来访问。 在深度上面,控制权限是最重要的,对于类,一个是default 和public,尽量最小权限;对于成员,private,default,protected,public。往上面走,权限越小,依赖的耦合就越小。 有几种描述: (a)Only talk to your immediate friends. (b)Don’t talk to strangers. 设计模式“facade”,"调停者模式"。在这里是IoD的典型表现。 备注: 当一个系统比较大的时候, 如果所有的模块都自己去寻找与自己相关的类的时候, 那么引用关系就会变得极度复杂, 耦合度高. 这个时候最好就设定一个为各个模块所熟悉的对象, 例如Context容器. 另外,各个模块可以应用facade模式, 提供一个简单的对外接口, 并将其嵌入Context容器. 这样, 模块间通过熟人Context来获取其他模块的Facade接口,…

jQueryMobile日期选择插件DateBox

jQueryMobile现在已经更新到1.2.0RC2,相信正式版也不会远了! jQueryMobile在布局、控件上面已经基本很满足开发者的使用了,在一些细节地方还是需要有其他插件的帮助了。比如日期选择控件,推荐DateBox这款日期选择插件使用简单,主题也能和jQueryMobile保持一致,特别是功能很丰富。 使用方法:<link rel="stylesheet" type="text/css" href="http://code.jquery.com/mobile/latest/jquery.mobile.min.css" /><link rel="stylesheet" type="text/css" href="http://dev.jtsage.com/cdn/datebox/latest/jqm-datebox.min.css" /><script type="text/javascript" src="http://code.jquery.com/jquery-1.7.1.min.js"></script><script type="text/javascript" src="http://code.jquery.com/mobile/latest/jquery.mobile.min.js"></script><!-- Optional Mousewheel support: http://brandonaaron.net/code/mousewheel/docs --><script type="text/javascript" src="PATH/TO/YOUR/COPY/OF/jquery.mousewheel.min.js"></script><script type="text/javascript" src="http://dev.jtsage.com/cdn/datebox/latest/jqm-datebox.core.min.js"></script><script type="text/javascript" src="http://dev.jtsage.com/cdn/datebox/latest/jqm-datebox.mode.calbox.min.js"></script><script type="text/javascript" src="http://dev.jtsage.com/cdn/datebox/i18n/jquery.mobile.datebox.i18n.en_US.utf8.js"></script>在线预览

优秀的手机应用UI赏析

现在做手机应用,UI是个最为关键的部分,要以设计为中心的应用开发。 分享一下优秀的手机应用UI,tumblr竟然可以了,担心以后会被封,我下载了界面的图片,做个保留。 优秀的手机应用UI赏析:http://androidniceties.tumblr.com/ 图片打包地址: http://pan.baidu.com/share/link?shareid=66283&uk=1006662537

再次推荐ant+hudson

上次推荐在《强势推荐ANT小蚂蚁》中提到使用ant可以完成同步svn代码、编译代码、打包代码、上传、部署的功能。这次再次将ant的功能提升一下,加入hudson持续集成引擎,将我们的程序化的工作更加的自动化完成。 Hudson 是一个可扩展的持续集成引擎,更多的信息可以下面网址。http://www.oschina.net/p/hudsonhttp://hudson-ci.org/ 配置使用步骤基本界面 我使用的Hudson的版本是2.2.1,已经有3.0.0RC的版本出来了,我求稳定,还是使用2.2.1,下载下来是个war,直接扔到tomcat下面就可以了。界面有中文,不过还没有实现全部的I18N,还有部分的英文,基本都认识的,不用担心。 基本界面如上,可以看到我有成功,也有失败的记录,我们的劳动总算是有记录了。建立构建工程 选择新建任务 我这里选择_自由风格_,根据项目实际情况选择。配置ant和任务调度 在任务配置界面中,因为我在ant脚本中已经写好了svn的信息,所以在这里就不配置版本管理了,只配置ant和任务调度两个。 在ant的配置中,只要你把ant脚本文件build.xml放在_C:.hudsonjobsTEST_下面,hudson就可以执行ant脚本了,当前在target中要配置了,在target中每行可以写一个执行的目标。 在_Build Triggers_中,我选择_Build periodically_,表示定时执行,需要写调度表达式。> ##### 调度表达式资料:Schedule的配置规则是有5个空格隔开的字符组成,从左到右分别代表:分 时 天 月 年,*代表所有。 例如:0 9 * * * 表示在任何年任何月的任何天的9点的0分4. 构建工程 可以可以选择_立刻构建_或者等定时任务就可以开始构建工程了,在Hudson可以查看执行的日志和最后的结果。看到_BUILD SUCCESSFUL_就说明,你成功了,恭喜!Hudson下载地址

c#时间戳转换

今天遇到个比较搞的事情,我们接口层的时间格式采用时间戳的格式来进行定义的。在各个语言上面应该是比较通用的吧! 我们讨论的焦点是c#不好处理,要把格式改成yyyy-mm-dd hh:mm:ss的格式,就这样产生了分歧。 我不做C#开发,也承认C#作为MS的产品,可能C#对于时间戳会没做很好的处理,可总有处理的办法吧!呀!这个问题纠结的啊! 为了测试有办法处理,给电脑装了VS2010,测试之后,才发现,这么容易处理! 发代码给大家瞧瞧,没学过代码的也能明白,啥叫个简单。using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace ConsoleApplication1{ class Program { static void Main(string[] args) { Console.WriteLine("时间戳转换为本地时间"); Console.WriteLine("1347872069"+"转换为本地时间:"); long l = 1347872069; // 本地时间为:2012/9/17 8:54:29 Console.WriteLine(FROM_UNIXTIME(l)); Console.WriteLine("================="); Console.WriteLine("本地时间转换为时间戳"); DateTime dt = DateTime.Now;//取系统当前时间 Console.WriteLine("系统当前时间:" + dt.ToLocalTime()); Console.WriteLine(UNIX_TIMESTAMP(dt)); Console.Read(); } //时间戳转换为本地时间 public static DateTime FROM_UNIXTIME(long timeStamp) { return DateTime.Parse("1970-01-01 00:00:00").AddSeconds(timeStamp); } //本地时间转换为时间戳 public static long UNIX_TIMESTAMP(DateTime dateTime) { return (dateTime.Ticks - DateTime.Parse("1970-01-01 00:00:00").Ticks) / 10000000; } }} 提供一个时间戳转换工具的网址,不相信,可以试试。http://shiningray.cn/toys/unix-timestamp

域名到期更换域名

10年的时候,也是因为域名到期,就把之前的cn域名换成了一个小众me的域名,用了两年,从搜索引擎不太容易搜索到,大鹏这个名字用的实在是太多了,近期me的域名也要到期了,选择了一个beardnote.com的组合域名,中文就叫胡子笔记。 胡子是借我的小名同音取的,小名就不告诉人了,比较好玩的名字。 现在博客托管在点点上面,可以专业作为一个网络笔记来使用了,反正没有空间、流量限制。 再次推荐一下点点,值得想做个人博客,而又懒于管理的人使用! 点点还可以绑定域名,而且目前还不用备案的。

每一行代码

每一行代码都是青春的流逝 每一行代码都是电脑的辐射 每一行代码都是手指的笔迹

大鹏的后院-原站

linux使用一周的体验

一大清早就听见下面垃圾车队出发的声音,吵得要命,再接着卫生管理者的大骂声,震耳欲聋啊!实在是睡不下去了!呵呵!最近把主系统改用linux了,使用的是linux deepin的版本,的确就像是linux deepin说的那样,免除新手痛苦、节约老手时间!在很多操作上面都已经很简单方便了!作为一个码农和一个软件爱好者,不得不承认,linux下面有很多软件是比不上windows的,我的win系统是win8预览版,装啦100多个软件,不包含游戏,在linux的可选就相当的少了!针对自己必需的软件,在linux也足够我使用了.娱乐办公类QQ:webqq或者采用wineqq2012音乐:本地使用深度音乐,深度音乐相当的给力,在线的选择就很多了,我主要使用的是虾米的air版本.下载:使用wine迅雷,或者浏览器下载,命令行的wget也是很不错的选择,wget -c还支持断点续传的.浏览器:主要是chrome,还有火狐也在使用.办公:libreoffice或者在线的,等待wps4linux.编辑器:自带的gnote,推荐用sublime text2,跨平台,我在win下面的主要编辑器…开发工具类:eclipse:自己装插件,可以定制自己使用各种开发工具,java.php.web等等等!tomcat:本身就跨平台mysql:同上uml:eclipse插件git:本来就是为linux服务的.特别一提的是,我喜欢用ms project去整理一些事情,在linux还有grant project可以替代的.个人用的笔记软件主要是wiz,wiz的linux版本太简陋,可以用wine来使用windows的版本.还有好多,不说了,要上班去了!来公司了,补充下自己使用的软件。http://pan.baidu.com/netdisk/singlepublic?fid=874434_2892209213

1 10 11 12 57