代理模式
代理模式的作用: 为其他对象提供一种代理以控制对这个对象的访问,在某些情况下,一个客户不想或者不能直接引用另一个对象,
而代理对象可以在客户端和目标对象之间起到 中介 的作用
举一个例子: 某一个人想请一个局长为他办一些事情,这个人可能不能直接去这个局长,因为局长不认识他,即使客户给他送礼或一些钱,局长也不会收,这时候怎么办?客户可以先去找局长的秘书或身边红人,局长秘书当然啦,跟局长比较密切,
这个客户他认识这个秘书,他通过秘书,告诉这个秘书,我要想请局长办些什么事情由这个秘书去让局长去做这个事情,他呢,把一些送礼啊,礼品啊送给秘书,由秘书转交给局长局长收到秘书给他的礼物之后,他就可以为这个人办些事情,这时候秘书就相当于是中介。
抽象角色:想办事的人
代理角色:秘书
真实角色:局长,他具有完成所需要的功能
1.示例
主要实现代码,分 4 步:
第一步 抽象角色:
Subject.java
abstract public class Subject{ abstract public void request();}
第二步代理角色:
ProxySubject.java
public class ProxySubject{
private RealSubject realSubject; //以真实角色作为代理角色的 ......
java 输入/输出流小记 (2)
字符输入流
BufferedReader
从 Reader 中读取多个字符到一个缓冲区,然后返回整个缓冲区内容。使小量读写更加
有效。
CharArrayReader
从一个 Char 数组中顺序读入多个字符
FileReader
从文件中顺序读入多个字符,是 InputStreamReader 的子类,能从一个自动创建的
FileInputStream 中读取数据。
FilterReader
字符输入流过滤器类的超类
InputStreamReader
从一个字节输入流读入字符,使用默认的编码方式或指定的编码方式将字节转化成字符
LineNumberReader
读取多行文本,并记录已经读取多少内容。
PipedReader
读取它所连接的 PipedOutputStream 中的多个字符。在多线程程序中使用。
PushbackReader
将固定大小的“回推缓冲区”添加到 Reader 中,从而这些内容可以是 “读不出”的
,这在某些解析程序中很有用。
Reader
所有字符输入流的超类
StringReader
从一个字符串中顺序读入字符
-------------------------------------------------------------
字节输出流
BufferedOutputStream
将字节按缓冲区输出,当缓冲区满时才将其中字节写往 OutputStream
ByteArray ......
Java使用两种方法来处理多线程
第一种是子类化Thread对象。 Thread对象是Java提供的封装线程的对象。如果子类化Thread类,则必须重载这个类中的run方法以提供由这个特殊线程执行的代码。因为Java不支持多重继承,所以如果你的类需要子类化另一个类,那么就不能子类化Thread对象。
第二种是实现由Java提供的Runnable接口并在该类中创建run方法。一个Java类可以实现很多接口,所以这种方法没有第一种方法那样的限制。然而现在run方法所在的类不再是thread类的子代,因此它不能直接访问Thread方法。
Thread类在java.lang包中定义,所以不必手动导入 ......
Java接口自己并不做实际的工作,它为最终做这些工作的方法指定原型。接口的名字一般以able结尾,名字其他的部分说明它如何工作。
当实现一个接口时,必须包含接口要求的方法。对Runnable来说,必须包含run方法。 ......
int pagenum=0;
int pagesize = 4;
int nowpage = 1;
String showpage = request.getParameter("page");
String sdept1 = request.getParameter("selectdept");
if(showpage!=null){
nowpage = Convertutil.strtoint(showpage);
}
List<ManageExamDTO>examlist = dao.findall();
List<ManageExamDTO>list1 = new ArrayList<ManageExamDTO>();
List<ManageExamDTO>list2 = new ArrayList<ManageExamDTO>();
if(sdept==null||sdept.equals(""))
for(ManageExamDTO dto : examlist){
list1.add(dto);
}
}else if(sdept!=null&&!sdept.equals("")){
for(ManageExamDTO dto : examlist){
if(dto.getSdept().indexOf(sdept)>=0){
list1.add(dto);
}
}
}else{
for(ManageExa ......
见下边的程序段
package test;
class A {
public String f(A obj)
{
return("A");
}
}
class B extends A {
public String f(B obj)
{
return("C");
}
public String f(A obj)
{
return("D");
}
}
我们使用子类创建一个对象:
B b = new B();
然后再将这个子类的引用放到父类对象中:
A a;
a = b;
那么这个父类对象a是子类对象b的上转型对象,对象的实体由子类负责建立,实质还是子类,只是损失了一些功能而已,这样的得失具体如下:
得:上转型对象可以操作和使用子类继承或者重写的方法。
失:上转型对象丧失了对子类新增成员变量或新增的方法的操作和使用。
那么下边的这段测试代码的打印结果就是&ldqu ......