W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
靜態(tài)代理
1.直接寫的類實(shí)現(xiàn)了Runnable相當(dāng)于真實(shí)角色You。
2.Thread相當(dāng)于靜態(tài)代理角色WeddingCompany。
3.Runnable相當(dāng)于Marry接口。
/**
*
* 靜態(tài)代理 設(shè)計(jì)模式
* 1.真實(shí)角色
* 2.代理角色:持有真實(shí)角色的引用。
* 3.二者實(shí)現(xiàn)相同的接口
*
*/
public class StaticProxy {
public static void main(String[] args) {
//創(chuàng)建真實(shí)角色
Marry you = new You();
//創(chuàng)建代理角色 + 真實(shí)角色的引用
WeddingCompany weddingCompany = new WeddingCompany(you);
//執(zhí)行任務(wù)
weddingCompany.marry();
}
}
//接口
interface Marry{
public abstract void marry();
}
//真實(shí)角色
class You implements Marry{
@Override
public void marry() {
// TODO Auto-generated method stub
System.out.println("你和xxx結(jié)婚了!");
}
}
//代理角色
class WeddingCompany implements Marry{
private Marry you;
public WeddingCompany() {}
public WeddingCompany(Marry you) {
this.you = you;
}
private void before() {
System.out.println("結(jié)婚之前的準(zhǔn)備工作。。。");
}
@Override
public void marry() {
// TODO Auto-generated method stub
before();
you.marry();
after();
}
private void after() {
System.out.println("結(jié)婚之后的收尾工作。。。");
}
}
使用實(shí)現(xiàn)Runnable接口的方式創(chuàng)建線程:
public class MyThread implements Runnable {
private int x = 30;
@Override
public void run() {
// TODO Auto-generated method stub
for(int i = 0; i < 10; i++) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
synchronized(this) {
System.out.println(Thread.currentThread().getName()+":x="+x);
x--;
}
}
}
public static void main(String[] args) {
//一個(gè)真實(shí)角色
MyThread myThread = new MyThread();
//三個(gè)代理角色
new Thread(myThread, "a").start();
new Thread(myThread, "b").start();
new Thread(myThread, "c").start();
//注意:可以有三個(gè)代理角色同時(shí)對(duì)一個(gè)對(duì)象代理,但有可能出錯(cuò),需要synchronized保持同步。
}
}
推薦使用實(shí)現(xiàn)Runnable接口的方式創(chuàng)建線程:
1.java是單繼承機(jī)制,但可以實(shí)現(xiàn)多個(gè)接口。
2.可以讓多個(gè)代理同時(shí)對(duì)一個(gè)對(duì)象操作。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: