day38(增强类的实现)
定义一个接口
package com.baidu.test;
public interface Person {
public abstract void eat();
public abstract void sleep();
}
定义一个类实现该接口
package com.baidu.test;
public class Student implements Person{
@Override
public void eat() {
System.out.println("吃饭中....");
}
@Override
public void sleep() {
System.out.println("睡觉中....");
}
}
增强类的实现(三种方式)
1.继承
必须要能控制这个(增强类)类的构造方法;
需要增强Student类(在吃饭前需要洗手)
package com.baidu.test;
public class StudentStrengthenExtends extends Student{
//我们需要在吃饭前进行洗手
@Override
public void eat() {
System.out.println("洗完手了");
super.eat();
}
}
测试:
public class Test {
public static void main(String[] args) {
Person p=new StudentStrengthenExtends();
p.eat();
}
}
输出结果:
洗完手了
吃饭中....
2.装饰者设计模式
前提:
a.增强类和被增强类不许实现相同的接口;
b.在增强类中获得被增强类的引用;
缺点:
接口中的方法过多,重写很多其他方法。
package com.baidu.test;
public class StudentStrengthenDecorate implements Person{
private Student s;
public StudentStrengthenDecorate(Student s) {
this.s=s;
}
@Override
public void sleep() {
// TODO Auto-generated method stub
}
@Override
public void eat() {
System.out.println("Decorate洗完手了");
s.eat();
}
}
测试类
public class Test {
public static void main(String[] args) {
Person p=new StudentStrengthenDecorate(new Student());
p.eat();
}
}
输出结果:
Decorate洗完手了
吃饭中....
3.动态代理
package com.baidu.test; import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method; public class StudentStrengthenProxy implements InvocationHandler{ private Person p;
public StudentStrengthenProxy(Person p) {
this.p=p;
} @Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
if("eat".equalsIgnoreCase(method.getName())){
System.out.println("洗手了");
method.invoke(p, args);
}
return null;
} }
测试:
import java.lang.reflect.Proxy;
public class Test {
public static void main(String[] args) {
Person p=new Student();
Person p1 = (Person) Proxy.newProxyInstance(p.getClass().getClassLoader(), p.getClass().getInterfaces(), new StudentStrengthenProxy(p));
p1.eat();
}
}
day38(增强类的实现)的更多相关文章
- (spring-第17回【AOP基础篇】) 创建增强类
一. 增强类包含的信息: a) 横切逻辑(插入的具体代码) b) 部分连接点信息(在方法的哪个位置插入代码,比如方法前.方法后等). 二. 增强的类型 每一种增强有一个需要实现的增强类 ...
- 常用上网增强类Chrome扩展(转)
Chrome是个非常好用的浏览器,拥有丰富的扩展资源库,能够满足网民各种各样的需求,对于网民来说,通过Chrome扩展来增强上网体验是一个基本需求,但是安装过多的扩展有容易耗费大量系统资源,今天月光博 ...
- Spring AOP切面变成——创建增强类
说明 Spring使用增强类定义横向逻辑,同时Spring只支持方法连接点,增量类还包含在方法的哪一点添加横切代码的方位信息.所以增强既包含横向逻辑,又包含部分连接点的信息. 类型 按着增强在目标类方 ...
- C#中关于增强类功能的几种方式
C#中关于增强类功能的几种方式 本文主要讲解如何利用C#语言自身的特性来对一个类的功能进行丰富与增强,便于拓展现有项目的一些功能. 拓展方法 扩展方法被定义为静态方法,通过实例方法语法进行调用.方法的 ...
- C# 中一些类关系的判定方法 C#中关于增强类功能的几种方式 Asp.Net Core 轻松学-多线程之取消令牌
1. IsAssignableFrom实例方法 判断一个类或者接口是否继承自另一个指定的类或者接口. public interface IAnimal { } public interface ID ...
- Spring学习(七)——增强类
Spring 切点 什么是切点?切点(Pointcut),每个程序类都拥有多个连接点,如一个拥有两个方法的类,这两个方法都是连接点,即连接点是程序类中客观存在的事物.但在这为数从多的连接点中,如何定位 ...
- Spring AOP获取不了增强类(额外方法)或无法通过getBean()获取对象
Spring AOP获取不了增强类(额外方法)和无法通过getBean()获取对象 今天在学习AOP发现一个小问题 Spring AOP获取不了额外方法,左思右想发现是接口上出了问题 先上代码 获取不 ...
- Spring AOP 创建增强类
AOP联盟为增强定义了org.aopalliance.aop.Advice接口,Spring支持5种类型的增强: 1)前置增强:org.springframework.aop.BeforeAd ...
- 浅谈JAVA中“增强”类的某个方法的几个中方法!
一.继承 使用场景:能够控制这个类的构造的时候,才可以使用继承. 优点:简单容易使用, 缺点:耦合性大大的增强,不利于后期的维护,所以对于继承这种方法,谨慎使用. 代码实现:二.装饰者模式 使用场景 ...
随机推荐
- 201521123115《Java程序设计》第13周学习总结
1. 本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 2. 书面作业 1. 网络基础 1.1 比较ping www.baidu.com与ping cec.jmu ...
- 201521123026《JAVA程序设计》第14周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多数据库相关内容. 2. 书面作业 1. MySQL数据库基本操作 建立数据库,将自己的姓名.学号作为一条记录插入.(截图,需出现自 ...
- java课程设计——猜数游戏个人博客
1.团队课程设计链接 团队博客:http://www.cnblogs.com/springbreezemiles/p/7064135.html 2.个人负责模块 猜数部分的算法及代码实现. 3.自己的 ...
- 201521123108 《Java程序设计》第九周学习总结
1. 本周学习总结 2. 书面作业 Q1.常用异常 题目5-1 1.1 截图你的提交结果(出现学号) 答: 1.2 自己以前编写的代码中经常出现什么异常.需要捕获吗(为什么)?应如何避免? 答:经常出 ...
- self、parent和$this关键字
self.parent和$this关键字的区别: self关键字用来指定当前的类,而且该关键字通常用来访问类的静态成员.方法和常量.parent关键字用于指向父类,所以使用该关键字调用父类的属性和方法 ...
- Geronimo tomcat: 在 Apache Geronimo 插件体系中将 Apache Tomcat 这个优秀的 Web 容器整合至其中
Apache Geronimo 灵活的插件体系将 Tomcat, OpenJPA, OpenEJB, ActiveMQ 等第三方组件集成至其中.本文从多角度介绍了在 Apache Geronimo 中 ...
- 如何定制 Calico 网络 Policy - 每天5分钟玩转 Docker 容器技术(70)
Calico 默认的 policy 规则是:容器只能与同一个 calico 网络中的容器通信.本节讨论如何定制 policy. calico 能够让用户定义灵活的 policy 规则,精细化控制进出容 ...
- Oracle-一个中文汉字占几个字节?
Oracle 一个中文汉字占用几个字节 Oracle 一个中文汉字 占用几个字节,要根据Oracle中字符集编码决定!!! 1. 如果定义为VARCHAR2(32 CHAR),那么该列最多就可以存储3 ...
- 全方位解读"CPU load average"
前一段时间,有同事因为“CPU负载到达5算不算高”的问题争论了一番,看似简单的一个问题表明了我们并没有真正理解服务器的CPU负载. 如果你的线上服务出现性能问题,那么检查机器的CPU负载情况是必不可少 ...
- 快速搞定用Vue+Webpack搭建前端项目(学习好久了,该写点东西了......)
现在开始安装环境 一.安装node.js 首先要安装node.js,去nodejs官网下载即可,地址:http://nodejs.cn/中文网. 安装完成后,打开终端(windows键+R)搜索cmd ...