1.代理模式
1.静态代理===>就是堆方法进行增强
首先有一个被增强的类,然后有一个增强的方法,在一个方法中在这个被增强类的前后调用增强方法.
首先是一个接口类
interface testA{
public void message();
}
实现接口类
class AddClass implements testA{
@Override
public void message() {
System.out.println("这是一个被增强方法");
}
}
创建一个类,类里边有一个方法,方法里边调用被增强类,并且在被增强的类的前后调用增强类
public class test动态代理 {
public AddClass addClass;
public test动态代理(AddClass addClass){
this.addClass = addClass;
}
public void haha(){
test(false);
addClass.message();
test(true);
}
public static void main(String[] args) {
test动态代理 test动态代理 = new test动态代理(new AddClass());
test动态代理.haha();
}
private void test(boolean isFlag) {
if (!isFlag){
System.out.println("before");
}else {
System.out.println("after");
}
}
}
2.动态代理
首先是被代理类
interface BuyHouse{
void buyHouse();
}
class BuyHouseImpl implements BuyHouse{
@Override
public void buyHouse() {
System.out.println("我要买房");
}
}
实现代理
public class test动态代理2 implements InvocationHandler {
public Object object;
public test动态代理2(final Object object){
this.object = object;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("买房前准备");
Object result = method.invoke(object, args);
System.out.println("买房后准备");
return result;
}
}
最后实现代理
class HouseApp{
public static void main(String[] args) {
BuyHouse buyHouse = new BuyHouseImpl();
BuyHouse buy = (BuyHouse)Proxy.newProxyInstance(
BuyHouse.class.getClassLoader(),
new Class[]{BuyHouse.class},
new test动态代理2(buyHouse)
);
buy.buyHouse();
}
}
interface BuyHouse{
void buyHouse();
}
class BuyHouseImpl implements BuyHouse{
@Override
public void buyHouse() {
System.out.println("我要买房");
}
}
public class test动态代理2 implements InvocationHandler {
public Object object;
public test动态代理2(final Object object){
this.object = object;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("买房前准备");
Object result = method.invoke(object, args);
System.out.println("买房后准备");
return result;
}
}
class HouseApp{
public static void main(String[] args) {
BuyHouse buyHouse = new BuyHouseImpl();
BuyHouse buy = (BuyHouse)Proxy.newProxyInstance(
BuyHouse.class.getClassLoader(),
new Class[]{BuyHouse.class},
new test动态代理2(buyHouse)
);
buy.buyHouse();
}
}
public class test3 {
}
interface A{
void buy();
}
class B implements A{
@Override
public void buy() {
System.out.println("哈哈,买东西了");
}
}
class C implements InvocationHandler{
Object object;
public C(Object object){
this.object = object;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("1");
Object invoke = method.invoke(object, args);
System.out.println("2");
return invoke;
}
}
class D{
public static void main(String[] args) {
A b = new B();
A hah = (A)Proxy.newProxyInstance(A.class.getClassLoader(),
new Class[]{A.class},
new C(b)
);
hah.buy();
}
}