学习笔记《***模式——静态***》
***模式
-
定义:
给某一个对象提供一个***,并由***对象控制对原有对象的引用。***模式的英文叫做Proxy或Surrogate,它是一种对象结构型模式。 -
动机:
通过引入一个新的对象来实现对真实对象的操作或者将新的对象作为真实对象的一个替身,这种实现机制即为***模式,通过引入***对象来间接访问一个对象,这就是***模式的模式动机。 -
例子:
用户在手机端预览的图片,其实都是本地的缩略图,真正的资源是存放在远程服务器上的,当用户点击缩略图预览,背后它新建了一个线程去调用远程的图片。
-
静态***结构类图,如下:
***类(Proxy)和被***类(RealSubject)都实现了同一个接口,且实现接口的方法request。
静态***
- 代码:
步骤1:
/** * 创建共有接口 */
public interface IShowPic {
void ShowPic(String picname);
}
步骤2:
/*** 创建实现接口的被***类,模拟远程 */
public class CRemoPic implements IShowPic {
@Override
public void ShowPic(String picname) {
//模拟远程调取一张图片,图片调取时间比较长
for(int i=0; i<3; i++){
System.out.println(i+1);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
步骤3:
/*** 创建实现接口的***类,模拟本地*/
public class CLocalPicShow implements IShowPic, Runnable {
private IShowPic pic;
private String picname;
@Override
public void run() {
//偷偷在远程调用来
pic.ShowPic(picname);
System.out.println(picname+"图片调用完成!");
}
@Override
public void ShowPic(String picname) {
//找一个远程对象过来
pic = new CRemoPic();
this.picname = picname;
//给用户一个提示
System.out.println("准备载入图片"+picname);
//启动线程,this指的是远程对象pic
Thread th = new Thread(this);
th.start();
}
}
步骤4:
/*** 客户端代码 */
//当被请求时,使用 CLocalPicShow 来获取 CRemoPic 类的对象。
public class ClientClass {
public static void main(String[] args) {
IShowPic iShowPic = new CLocalPicShow();
iShowPic.ShowPic("Photo2.jpg");
//实现跟远程的复杂调用关系变得简洁,如麻烦的后台处理的时候,本地先给用户一个响应。
}
}
- 执行程序,输出结果:
使用静态***很容易就完成了对一个类的***操作。但是静态***的缺点也暴露了出来:由于***只能为一个类服务,如果需要***的类很多,那么就需要编写大量的***类,比较繁琐。