- 浏览: 60887 次
- 性别:
- 来自: 青岛
最新评论
-
u013246812:
访问不了啊,链接不存在!要么给个源码也行啊!
地方性网站 城阳部落 -
yhman:
原地复活。。。
php+mysql -
wo327808864:
...
socket传输自定义对象 -
锅巴49:
说得好,理解了。
状态模式 -
yhman:
哈哈。。。。
java的文件锁
文章列表
Spring 管理hibernate事务的标签使用:
PROPAGATION_REQUIRED -- 支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。
PROPAGATION_SUPPORTS -- 支持当前事务,如果当前没有事务,就以非事务方式执行。
PROPAGATION_MANDATORY -- 支持当前事务,如果当前没有事务,就抛出异常。
PROPAGATION_REQUIRES_NEW -- 新建事务,如果当前存在事务,把当前事务挂起。
PROPAGATION_NOT_SUPPORTED -- 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
PR ...
以前我在开发中遇到一个问题,就是一台机子只能同时运行一个该系统,因为java是运行在jvm上的,在进程中所有的java程序都是javaw.exe,这样一来就不能通过操作进程来判断是否系统已经开启。
因为系统中用到了socket,所以用了一个比较笨的替代办法,就是系统启动时候判断server的端口是否被占用,如果socekt连接出现异常,则系统退出。
后来在新的公司发现了一个好的解决办法,就是通过锁定一个文件,来判断系统是否启动。我当时有想过一个办法就是用vb之类的写一个exe,我的系统运行时候可以打开这个exe,这样可以通过进程判断系统是否启用,但是这样面临的一个问题就是 ...
从年初就想学一学android了,有朋友做这一块,但因为近来工作繁忙,可以说是有资源无热心了。
今天周日,看了一会书,有点无聊,索性在电脑上搭好了android的开发环境。
试写了几个小程序,有swing和swt开发经历,至少在最初的时候感觉还是挺易入门的。
以后我会多投入点时间进来的。
因为网络协议的缘故,传输只能传输流,所以对象必须序列化与反序列化,要传说的对象需要实现Serializable,client的和server中的该对象必须有相同的SerializableUID,这样才会认同为同一类。
但是我这样做仍然有classnotfoundexception,后来经过 高人钦 的指点才知传输类必须在client和server中的包路径相同。
这样测试通过。
flyweight模式的出现是因为面向对象开发有时在设计和性能方面存在相悖的情况,当内存因为对象过多而产生泄露导致宕机,而这又是由于业务本身需求的时候,我们就不得不采用以时间换空间的策略了.
这里便引入了亨元模式.
我理解的亨元模式是抽取对象中共有的属性作为元,产生对象并放在池中(显然此时创建的对象要少的多),然后在用到的时候直接从池中取得.
但这样做很显然会涉及到同步的问题,此时有N个用户需要该对象,但此时又加了锁,那只能进入等待队列中.该怎么样解决,因为我实际并没有在专案中用到过该模式,所以也不甚明白,总之感觉就算效率低下也总比宕机要好的多.
亦有有经验人在解决同步时称:在使用享元模式时,对 ...
memento是一个保存另外一个对象内部状态拷贝的对象.这样以后就可以将该对象恢复到原先保存的状态.
第一种就是采用两个不同的接口类来限制访问权限。这两个接口类中,一个提供比较完
备的操作状态的方法,我们称它为宽接口;而另一个则可以只是一个标示,我们称它为窄接
口。备忘录角色要实现这两个接口类。这样对于“备忘发起角色”采用宽接口进行访问,而
对于其他的角色或者对象则采用窄接口进行访问。
这种实现比较简单,但是需要人为的进行规范约束——而这往往是没有力度的。
第二种方法便很好的解决了第一种的缺陷:采用内部类来控制访问权限。将备忘录角色
作为“备忘发起角色”的一个私有内部类。好处我不详细解释了,看 ...
Interpreter,解释器模式描述了如何构成一个简单的语言解释器,主要应用在使用面向对象语言开发
编译器中;在实际应用中,我们可能很少碰到去构造一个语言的文法的情况。
解释器模式的定义如下:定义语言的文法,并且建立一个解释器来解释该语言中的句子。
它属于类的行为模式。这里的语言意思是使用规定格式和语法的代码。
在GOF 的书中指出:如果一种特定类型的问题发生的频率足够高,那么可能就值得将
该问题的各个实例表述为一个简单语言中的句子。这样就可以构建一个解释器,该解释器通
过解释这些句子来解决该问题。而且当文法简单、效率不是关键问题的时候效果最好——这
也就是解释器模式适用的环境。
让我们来看看 ...
Mediator Pattern
用一个调停对象来封装一系列的对象交互。调停者使
各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
简单点来说,将原来两个直接引用或者依赖的对象拆开,在中间加入一个“调停”对象,使得
两头的对象分别和“调停”对象引用或者依赖。
当然并不是所有的对象都需要加入“调停”对象。如果对象之间的关系原本一目了然,调
停对象的加入便是“画蛇添足”。
来看下调停者模式的组成部分吧。
1) 抽象调停者(Mediator)角色:抽象调停者角色定义统一的接口用于各同事角色之间的
通信。
2) 具体调停者(Concrete Mediator)角色:具体调 ...
在写原型模式的时候,在用clone()方法实现了的时候,发现对于深拷贝来说,会对每一个相关类添加clone方法.这样会增加代码量,故推荐在深拷贝的时候使用序列化与反序列化实行.参见于我写的原型模式.
在写序列化的时候,我想到关于子类继承实现序列化的问题,倘若是父类实现了Serializable接口,那直接对子类序列化即可.倘若父类没有实现,而子类实现了Serializable,那仅能得到子类属性而得不到其集成自父类的属性了.当然倘若都不实现Serializable,那在序列化的时候是会报错的.对象序列化的时候必须实现Serializable.
下面是父类实现了Serializable的代码:
p ...
原型模式(Prototype): 用原型实例指定创建对象的种类,并且通过拷贝原型来创建新的实例对象。它允许一个对象再创建另外一个可定制的对象,根本无需知道任何创建细节,工作原理,通过将一个原型对象传给那个要发动创建的对象,这个发动创建对象通过请求原型对象拷贝它们自己来创建。
通俗点,就是通过拷贝来进行创建实例。
原型模式适合在什么场景使用?一是类初始化需要消化非常多的资源,这个资源包括数据、硬件资源
等;二是通过new 产生一个对象需要非常繁琐的数据准备或访问权限,则可以使用原型模式;三是一个对
象需要提供给其他对象访问,而且各个调用者可能都需要修改其值时,可以考虑使用原型模式拷贝多个对
象供调 ...
Object类中提供了clone方法.
import java.util.ArrayList;
public class TestClone implements Cloneable {
public TestClone() {
System.out.println("构造函数被执行了...");
}
private ArrayList<String> arrayList = new ArrayList<String>();
@Override
public TestClone clone() {
Te ...
State的定义: 不同的状态,不同的行为;或者说,每个状态有着相应的行为.
State模式在实际使用中比较多,适合"状态的切换".因为我们经常会使用If elseif else 进行状态切换, 如果针对状态的这样判断切换反复出现,我们就要联想到是否可以采取State模式了.
不只是根据状态,也有根据属性.如果某个对象的属性不同,对象的行为就不一样,这点在数据库系统中出现频率比较高,我们经常会在一个数据表的尾部,加上property属性含义的字段,用以标识记录中一些特殊性质的记录,这种属性的改变(切换)又是随时可能发生的,就有可能要使用State.
何时使用 State模式 ...
表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的 新操作。
1) 访问者角色(Visitor):为该对象结构中具体元素角色声明一个访问操作接口。该操作接口的名字和参数标识了发送访问请求给具体访问者的具体元素角色。这样访问者就可以通过该元素角色的特定接口直接访问它。
2) 具体访问者角色(Concrete Visitor):实现每个由访问者角色(Visitor)声明的操作。
3) 元素角色(Element):定义一个Accept操作,它以一个访问者为参数。
4) 具体元素角色(Concrete Element):实现由元素角色提供的Acce ...
Chain of Responsibility(CoR) 是用一系列类(classes)试图处理一个请求request,这些类之间是一个松散的耦合,唯一共同点是在他们之间传递request. 也就是说,来了一个请求,A类先处理,如果没有处理,就传递到B类处理,如果没有处理,就传 ...
Timer是一种定时器工具,用来在一个后台线程计划执行指定任务。它可以计划执行一个任务一次或反复多次。
TimerTask一个抽象类,它的子类代表一个可以被Timer计划的任务。
public class TimerTest {
public static void main(String[] args) {
final Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
System.out.println( ...