代理模式那些事

直接上代碼

public class MarkCompany implements InvocationHandler {

private Objectfactory;

public Object getFactory() {

return factory;

}

public void setFactory(Object factory){

this.factory = factory;

}

//通過Proxy獲得動態代理

? ? public Object getProxyIn(){

return Proxy.newProxyInstance(factory.getClass().getClassLoader(),

factory.getClass().getInterfaces(),this);

}

//通過動態代理對象進行增強

? ? @Override

? ? public Object invoke(Object o, Method method, Object[] objects)throws Throwable {

doSthAfter();

Object invoke = method.invoke(factory, objects);

doSthBefore();

return invoke;

}

private void doSthAfter(){

Log.i("TAG","doSthAfter: MarkCompany精美包裝,快遞一條龍服務");

}

private void doSthBefore(){

Log.i("TAG","doSthBefore: MarkCompany根據需求,進行市場調研和產品分析");

}

}


public class AaFactoryimplements ManToolsFactory{

@Override

? ? public void saleManTools(String size) {

Log.i("TAG","AaFactory saleManTools: "+"按需定制一個size為"+size+"的女model");

}

}


public class Alivenimplements WomanToolsFactory {

@Override

? ? public void saleWomanTools(float length) {

doSthAfter();

womanToolsFactory.saleWomanTools(length);

doSthAfter();

}

private void doSthAfter(){

Log.i("TAG"," Aliven doSthAfter: 精美包裝,快遞一條龍服務");

}

private void doSthBefore(){

Log.i("TAG","Aliven doSthBefore: 根據需求,進行市場調研和產品分析");

}

private WomanToolsFactorywomanToolsFactory;

public Aliven(WomanToolsFactory womanToolsFactory){

this.womanToolsFactory = womanToolsFactory;

}

}



public class BbFactory implements WomanToolsFactory{

@Override

? ? public void saleWomanTools(float length) {

Log.i("TAG","BbFactory saleManTools: "+"按需定制一個size為"+length+"的男model");

}

}



public interface ManToolsFactory {

void saleManTools(String size);

}


//代理對象

public class Mark implements ManToolsFactory ,WomanToolsFactory{

public ManToolsFactoryfactory;

public Mark(ManToolsFactory manToolsFactory){

factory = manToolsFactory;

}

@Override

? ? public void saleManTools(String size) {

doSthAfter();

factory.saleManTools(size);

doSthBefore();

}

private void doSthAfter(){

Log.i("TAG","Mark doSthAfter: 精美包裝,快遞一條龍服務");

}

private void doSthBefore(){

Log.i("TAG","Mark doSthBefore: 根據需求,進行市場調研和產品分析");

}

@Override

? ? public void saleWomanTools(float length) {

}

private WomanToolsFactorywomanToolsFactory;

public Mark(WomanToolsFactory womanToolsFactory){

this.womanToolsFactory = womanToolsFactory;

}

}


public interface WomanToolsFactory {

void saleWomanTools(float length);

}


在需要的地方使用對應的方法

private void factory(){

//靜態代理

? ? ? ? ManToolsFactory manToolsFactory =new AaFactory();

Mark mark =new Mark(manToolsFactory);

//靜態代理

? ? ? ? mark.saleManTools("D");

//靜態代理

? ? ? ? WomanToolsFactory womanToolsFactory =new BbFactory();

Aliven aliven =new Aliven(womanToolsFactory);

aliven.saleWomanTools(10f);

//動態代理

//舉例1

? ? ? ? WomanToolsFactory womanToolsFactory1 =new BbFactory();

MarkCompany markCompany =new MarkCompany();

markCompany.setFactory(womanToolsFactory1);

WomanToolsFactory employ1 = (WomanToolsFactory)markCompany.getProxyIn();

employ1.saleWomanTools(12f);

//舉例2

? ? ? ? ManToolsFactory manToolsFactory1 =new AaFactory();

markCompany.setFactory(manToolsFactory1);

ManToolsFactory employ2 = (ManToolsFactory)markCompany.getProxyIn();

employ2.saleManTools("111");

}

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容