靜態代理可以在不改變原有代碼的情況下,增加新的功能和操作,對原有物件進行擴展,
靜態代理要求真實物件和代理物件都實作同一個介面,由代理物件代理真實角色的介面實作,并在實作前后增加新的操作,
public class StaticProxy{
public static void main(String[] args){
Person person = new Person("張三");
//由代理物件代理真實物件的方法
new WeddingCompany(person).happyMarry();
}
}
//要實作的介面
interface Marry{ void happyMarry();}
//真實物件
class Person implements Marry{
private String name;
public Person(String name){this.name = name;}
public void happyMarry(){ //實作介面
System.out.println(this.name + " is gonna married, Happy!");
}
}
//代理物件
class WeddingCompany implements Marry{
private Person person;
public void WeddingCompany(Person person){ this.person = person; }
public void happyMarry(){//實作介面的方法
before(); //代理程序中額外添加的操作
person.happyMarry(); //真實物件的操作
after(); //代理程序中額外添加的操作
}
public void before(){System.out.println("Before wedding, set up the scene...")}
public void after(){System.out.println("After wedding, clean up after...");}
}
在之前的筆記(11)中已經出現過靜態代理了,創建多執行緒的方法中,提到的第一種方法是直接繼承Thread類,第二種方法是實作Runnable介面,然后創建Thread類,將待執行執行緒作為引數傳遞進去,呼叫start()方法啟動,
public static void main(String[] args) {
TestThread testThread = new TestThread();//創建真實物件
new Thread(testThread).start();//由代理物件代理執行
for (int i = 0; i < 5; i++) {
System.out.println("main 方法執行緒: " + i);
}
}
實際上這就是靜態代理了,TestThread是真實物件,Thread是代理物件,二者都實作了Runnable介面,由Thread類代理執行待執行執行緒,
靜態代理可以做很多真實物件做不了的事情,而真實物件可以專注做自己的事情,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/549264.html
標籤:Java

