直接上代碼
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");
}