java学习

java学习

 

设计模式之访问者模式

访问者模式主要是将很多操作都在一个接口中声明,在接口的实现类中都要实现这些操作,
在具体的访问者类中规定了需要调用实现类的哪个方法,
例子如下:
访问者接口:
public interface Visitor {
public void visitString(StringElement stringE);
    
    public void visitFloat(FloatElement floatE);
    
    public void visitCollection(Collection<?> collection);
    public void visitInt(IntElement inte);

}
访问者接口实现类
public class ConcreteVisitor implements Visitor{
    public void visitCollection(Collection<?> collection) {
        Iterator<?> iterator = collection.iterator();
        while (iterator.hasNext()) {
            Object o = iterator.next();
            if (o instanceof Visitable) {
                ((Visitable)o).accept(this);
            }
        }
    }

    public void visitFloat(FloatElement floatE) {
        System.out.println(floatE.getFe());
    }

    public void visitString(StringElement stringE) {
        System.out.println(stringE.getSe());
    }

    @Override
    public void visitInt(IntElement inte) {
        System.out.println(inte.getInts());
        
    }

}
操作类的接口:

public interface Visitable {
     public void accept(Visitor visitor);

}
操作类的具体实现类:
public class FloatElement implements Visitable{
private Float fe;
    
    public FloatElement(Float fe) {
        this.fe = fe;
    }
    
    public Float getFe() {
        return this.fe;
    }
    
    public void accept(Visitor visitor) {
        visitor.visitFloat(this);
    }

}
public class IntElement implements Visitable{
    private int ints;

    public int getInts() {
        return ints;
    }

    public IntElement(int i){
        this.ints = i;
    }

    @Override
    public void accept(Visitor visitor) {
        visitor.visitInt(this);
        
    }

}
public class StringElement implements Visitable{
private String se;
    
    public StringElement(String se) {
        this.se = se;
    }
    
    public String getSe() {
        return this.se;
    }
    
    public void accept(Visitor visitor) {
        visitor.visitString(this);
    }

}
测试类:
public class Test {
    public static void main(String[] args) {
        Visitor visitor = new ConcreteVisitor();
        Visitable se = new StringElement("abc");
        se.accept(visitor);
        
        Visitable fe = new FloatElement(new Float(1.5));
        fe.accept(visitor);
        System.out.println("===========");
        List<Visitable> result = new ArrayList<Visitable>();
        result.add(new StringElement("abc"));
        result.add(new StringElement("abc"));
        result.add(new StringElement("abc"));
        result.add(new FloatElement(new Float(1.5)));
        result.add(new FloatElement(new Float(1.5)));
        result.add(new FloatElement(new Float(1.5)));
        visitor.visitCollection(result);
        Visitable is = new IntElement(2);
        is.accept(visitor);
    }

}

posted @ 2013-04-18 16:20 杨军威 阅读(183) | 评论 (0)编辑 收藏

设计模式之模板模式

概述:
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。
TemplateMethod使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
适用性:
1.一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。

    2.各子类中公共的行为应被提取出来并集中到一个公共父类中以避免代码重复。
      首先识别现有代码中的不同之处,并且将不同之处分离为新的操作。
      最后,用一个调用这些新的操作的模板方法来替换这些不同的代码。
例子如下:模板类:
public abstract class Template {
     public abstract void print();
        
        public void update() {
            System.out.println("公共的代码");
           System.out.println("下面是子类各自实现的代码");
                print();
            
        }
}
模板类的子类:
public class TemplateConcrete extends Template{
      @Override
        public void print() {
            System.out.println("这是子类的实现");
        }

}
测试类
public class Test {
    public static void main(String[] args) {
        Template temp = new TemplateConcrete();
        temp.update();
    }

}

posted @ 2013-04-18 16:04 杨军威 阅读(135) | 评论 (0)编辑 收藏

extjs中为表格添加单选行单元格的事件

grid.addListener('cellclick', cellclick);
 function cellclick(grid, rowIndex, columnIndex, e) {
  var record = grid.getStore().getAt(rowIndex);
  var fieldName = grid.getColumnModel().getDataIndex(columnIndex);
  var data = record.get(fieldName);
  if(data==null){ //处理预览 
   var alias=record.get("Alias");
   window.open(url);
   //window.location.href="DoIpcammera?dowith=preview&&alias="+alias;
  }
 }

posted @ 2013-04-18 15:06 杨军威 阅读(427) | 评论 (0)编辑 收藏

extjs自动生成排序数组

new Ext.grid.RowNumberer()

posted @ 2013-04-18 15:00 杨军威 阅读(229) | 评论 (0)编辑 收藏

extjs中单选Radio的使用

var AddtoobarT = new Ext.form.Radio({
        name : "istoobar",//后台接受的名称
        inputValue : "true",//传后台的值
        boxLabel : "有",//页面显示的值
        checked : true//默认选择的值
       });
       var AddtoobarF = new Ext.form.Radio({
        name : "istoobar",
        inputValue : "false",
        boxLabel : "没有"
       });
       var Addtoobar = new Ext.form.RadioGroup({
        name : "toolbar",
        fieldLabel : "有无工具栏",
        items : [ AddtoobarT, AddtoobarF ],
        width : 200
       });

posted @ 2013-04-18 14:57 杨军威 阅读(558) | 评论 (0)编辑 收藏

设计模式之职责链模式

职责链模式规定了一个请求,这个请求需要特定的对象去处理,当把这个请求交个一个对象,但是这个对象不负责处理这个请求,可以动态地交给其他对象处理,直到交给对的对象处理,这些对象都有处理请求的机会,只有当请求是该自己负责的时候才处理,否则交给其他对象。

下面以==============

要离职, 人事审批!

请求完毕

===========

要加薪, 项目经理审批!

========

要请假, 项目组长审批!

的规定,写一个职责链模式的例子:

这是所有请求的接口

public interface Request {

void getRequest();

}

请假的请求实现类

public class LeaveRequest implements Request{

@Override

public void getRequest() {

System.out.println("leave");

}

}

离职的请求实现类

public class DimissionRequest implements Request{

@Override

public void getRequest() {

System.out.println("dimission");

}

}

加薪的请求实现类

public class AddMoneyRequest implements Request{

@Override

public void getRequest() {

System.out.println("add money");

}

}

处理请求的接口

public interface RequestHandle {

void handleRequest(Request request);

}

Hr处理离职的请求

public class HRRequestHandle implements RequestHandle{

public void handleRequest(Request request) {

        if (request instanceof DimissionRequest) {

            System.out.println("要离职, 人事审批!");

        } 

        System.out.println("请求完毕");

    }

}

组长处理请假的请求

public class TLRequestHandle implements RequestHandle{

RequestHandle rh;

    

    public TLRequestHandle(RequestHandle rh) {

        this.rh = rh;

    }

    public void handleRequest(Request request) {

        if (request instanceof LeaveRequest) {

            System.out.println("要请假, 项目组长审批!");

        } else {

            rh.handleRequest(request);

        }

    }

}

经理处理加薪的请求

public class PMRequestHandle implements RequestHandle{

RequestHandle rh;

public PMRequestHandle(RequestHandle rh) {

    this.rh = rh;

}

public void handleRequest(Request request) {

    if (request instanceof AddMoneyRequest) {

        System.out.println("要加薪, 项目经理审批!");

    } else {

        rh.handleRequest(request);

    }

}

}

测试类

public class Test {

public static void main(String[] args) {

//先把所有的处理请求的对象组成职责链

        RequestHandle hr = new HRRequestHandle();

        RequestHandle tl = new TLRequestHandle(hr);//组长

        RequestHandle pm = new PMRequestHandle(tl);//经理

      

        Request dimissionRequest = new DimissionRequest();

        Request addMoneyRequest = new AddMoneyRequest();

        Request  leaveRequest = new LeaveRequest();

        System.out.println("==============");

        //人事处理离职请求

        

        pm.handleRequest(dimissionRequest);

        

        System.out.println("===========");

        //经理处理加薪请求

      

        pm.handleRequest(addMoneyRequest);

        

        System.out.println("========");

        //项目组长处理请假请求

       

        pm.handleRequest(leaveRequest);

    }

}



在使用时要调用最高级的职责调用者,由他去负责往下分配职责

posted @ 2013-04-17 14:29 杨军威 阅读(173) | 评论 (0)编辑 收藏

mysql中is null和=null的含义

is null是判断某个字段是否是空,为空并不等价于空字符串或者数字0
=null  是判断某个值是否等于null,null=null,和null<>null都是false

posted @ 2013-04-16 13:32 杨军威 阅读(1637) | 评论 (0)编辑 收藏

mysql查询去除重复数据DISTINCT

select DISTINCT job   from emp where deptno=20

posted @ 2013-04-16 13:14 杨军威 阅读(353) | 评论 (0)编辑 收藏

mysql函数中upper()的意思和排除空值

select name from user where upper(name) ='TOM' and sal is not null;
upper()函数的作用是把表中的name转换成大写再做比较

posted @ 2013-04-16 13:05 杨军威 阅读(411) | 评论 (0)编辑 收藏

mysql求数值列的和,其中一列可能是空

求薪金sal列和绩效comm列的和,comm可能是空,
select sal+if(comm is null,0,comm) from emp;
当comm是空时,返回0,不空时返回comm的数值

posted @ 2013-04-16 11:12 杨军威 阅读(258) | 评论 (0)编辑 收藏

仅列出标题
共43页: First 上一页 21 22 23 24 25 26 27 28 29 下一页 Last 

导航

统计

常用链接

留言簿

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜