JAVA 代理模式之通用接口/继承的实现方式
2012-05-08 16:14
543 查看
JAVA 代理模式之通用接口/继承的实现方式
1.它能干什么/ 解决什么问题。
在不动代码的情况下增加额外的处理逻辑,如日志,输出等。
2.代码结构。
一个接口,一个它的实现类再加一个代理类。其中实现类我们称之为目标类。
3.通用接口的实现特点
代理类和目标类实现同一个接口,在代理类中调用目标方法的同时添加额外的逻辑。这样就实现了代理。
4.具体的CODE.
a.通用接口--AnimalOfGeneralInterface
package sample.proxy.generalInterface;
public interface AnimalOfGeneralInterface {
void eat(String food);
String type();
}
b.实现类/目标类/真实的类--MonkeyOfRealClass
package sample.proxy.generalInterface;
public class MonkeyOfRealClass implements AnimalOfGeneralInterface {
@Override
public void eat(String food) {
System.out.println("The food is "+food+" !");
}
@Override
public String type() {
String type ="哺乳动物 ";
System.out.println("type is "+type+" ! ");
return type;
}
}
c.代理类--AnimalWrapperOfProxyClass
package sample.proxy.generalInterface;
public class AnimalWrapperOfProxyClass implements AnimalOfGeneralInterface {
private AnimalOfGeneralInterface animal;
public AnimalWrapperOfProxyClass(AnimalOfGeneralInterface animal){
this.animal = animal;
}
@Override
public void eat(String food) {
System.out.println("---------Wrapper before--------------");
animal.eat(food);
System.out.println("---------Wrapper after--------------");
}
@Override
public String type() {
System.out.println("---------Wrapper before--------------");
String type = animal.type();
System.out.println("---------Wrapper after--------------");
return type;
}
}
d.测试类
package sample.proxy.generalInterface;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
AnimalWrapperOfProxyClass wrapper = new AnimalWrapperOfProxyClass(new MonkeyOfRealClass());
wrapper.eat("桃子");
wrapper.type();
}
}
f.结果,其中Wrapper before,Wrapper after 就是我们在目标前后添加的额外逻辑。
---------Wrapper before--------------
The food is 桃子 !
---------Wrapper after--------------
---------Wrapper before--------------
type is 哺乳动物 !
---------Wrapper after--------------
至于继承模式 稍作修改如下
代理类不在实现统一接口,而是继承目标类。
public class MyAnimalWrapperOfProxyClass extends MonkeyOfRealClass{
这里代码和上面AnimalWrapperOfProxyClass完全一样,其测试代码和结果也完全一样。
}
明显的缺陷不能代理统一接口的所有子类的方法,范围大大的减小,这个实现只作了解吧。
1.它能干什么/ 解决什么问题。
在不动代码的情况下增加额外的处理逻辑,如日志,输出等。
2.代码结构。
一个接口,一个它的实现类再加一个代理类。其中实现类我们称之为目标类。
3.通用接口的实现特点
代理类和目标类实现同一个接口,在代理类中调用目标方法的同时添加额外的逻辑。这样就实现了代理。
4.具体的CODE.
a.通用接口--AnimalOfGeneralInterface
package sample.proxy.generalInterface;
public interface AnimalOfGeneralInterface {
void eat(String food);
String type();
}
b.实现类/目标类/真实的类--MonkeyOfRealClass
package sample.proxy.generalInterface;
public class MonkeyOfRealClass implements AnimalOfGeneralInterface {
@Override
public void eat(String food) {
System.out.println("The food is "+food+" !");
}
@Override
public String type() {
String type ="哺乳动物 ";
System.out.println("type is "+type+" ! ");
return type;
}
}
c.代理类--AnimalWrapperOfProxyClass
package sample.proxy.generalInterface;
public class AnimalWrapperOfProxyClass implements AnimalOfGeneralInterface {
private AnimalOfGeneralInterface animal;
public AnimalWrapperOfProxyClass(AnimalOfGeneralInterface animal){
this.animal = animal;
}
@Override
public void eat(String food) {
System.out.println("---------Wrapper before--------------");
animal.eat(food);
System.out.println("---------Wrapper after--------------");
}
@Override
public String type() {
System.out.println("---------Wrapper before--------------");
String type = animal.type();
System.out.println("---------Wrapper after--------------");
return type;
}
}
d.测试类
package sample.proxy.generalInterface;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
AnimalWrapperOfProxyClass wrapper = new AnimalWrapperOfProxyClass(new MonkeyOfRealClass());
wrapper.eat("桃子");
wrapper.type();
}
}
f.结果,其中Wrapper before,Wrapper after 就是我们在目标前后添加的额外逻辑。
---------Wrapper before--------------
The food is 桃子 !
---------Wrapper after--------------
---------Wrapper before--------------
type is 哺乳动物 !
---------Wrapper after--------------
至于继承模式 稍作修改如下
代理类不在实现统一接口,而是继承目标类。
public class MyAnimalWrapperOfProxyClass extends MonkeyOfRealClass{
这里代码和上面AnimalWrapperOfProxyClass完全一样,其测试代码和结果也完全一样。
}
明显的缺陷不能代理统一接口的所有子类的方法,范围大大的减小,这个实现只作了解吧。
相关文章推荐
- AOP:静态代理实现方式①通过继承②通过接口
- spring02 注解方式实现MVC、spring的继承、代理模式(静/动) :jdk动态代理,cglib动态代理
- Java【多线程知识总结(5)】比较继承Thread类创建线程和实现Runnable接口创建线程这两种方式
- JAVA多线程实现的三种方式(继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程)
- java实现多线程的两种方式继承Thread类和实现Runnable接口的方法
- Java【多线程知识总结(5)】比较继承Thread类创建线程和实现Runnable接口创建线程这两种方式
- Java的代理模式(通过公共接口实现)
- 线程创建:继承Thread、接口Runnable(静态代理模式)、接口CallableJAVA169-173
- Java-马士兵设计模式学习笔记-代理模式-聚合与继承方式比较
- 【Java多线程学习】Java多线程的两种实现方式:继承Thread类 & 实现Runable接口
- 在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口
- JAVA多线程实现方式主要有三种:继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程。其中前两种方式线程执行完后都没
- [设计模式]接口代理实现Application的多继承
- java实现多线程的两种方式继承Thread类和实现Runnable接口
- Java并发03:多线程实现三方式:继承Thread类、实现Runnable接口、实现Callable接口
- Object-c的类可以多重继承么?可以实现多个接口么?Category是什么?重写一个类的方式用继承好还是分类好?为什么?
- java中最严谨的单例模式的实现方式
- PHP以接口方式实现多重继承(完全模拟)--学习笔记
- Java使用简单工厂模式对面向接口编程模式的深度解耦实现
- Java 单例模式的安全实现方式