<黑马程序员>代理模式总结-静态代理

------- android培训java培训、期待与您交流! ----------


        代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供特定的服务。 
按照代理的创建时期,代理类可以分为两种。 
静态代理:由程序员创建或特定工具自动生成源代码,再对其编译。在程序运行前,代理类的.class文件就已经存在了。 
动态代理:在程序运行时,运用反射机制动态创建而成。 

需求:

1、使用静态代理模式,对数据库中的数据进行增删改查操作

2、对每一个操作,都需要对其进行日志记录

那么我们先以静态代理进行示例展示

1、接口StaticProxy_Interface 

package com.proxy.static_proxy;
/*
 * 演示静态代理类
 * 
 * 功能:定义一个接口,用于对数据库进行操作
 * 
 * @author lijl
 * */
public interface StaticProxy_Interface {
	//插入
	public void Insert();
	
	//删除
	public void Delete();
	//修改
	public void Update();

	//查询
	public void Select();
	
}


2、StaticProxy_Impl 委托类

package com.proxy.static_proxy;
/*
 * 演示静态代理类
 * 
 * 功能:业务逻辑类,即委托类
 * 本类实现StaticProxy_Interface接口,对数据库的模拟增删改查功能
 * 
 * @author lijl 
 * */
public class StaticProxy_Impl implements StaticProxy_Interface {

	@Override
	public void Insert() {
		// TODO Auto-generated method stub
		System.out.println("StaticProxy_Impl.Insert()...........");

	}

	@Override
	public void Delete() {
		// TODO Auto-generated method stub
		System.out.println("StaticProxy_Impl.Delete()...........");
	}

	@Override
	public void Update() {
		// TODO Auto-generated method stub
		System.out.println("StaticProxy_Impl.Update()...........");
	}

	@Override
	public void Select() {
		// TODO Auto-generated method stub
		System.out.println("StaticProxy_Impl.Select()...........");
	}

}


3、静态代理类 StaticProxy 

package com.proxy.static_proxy;

/*
 * 演示静态代理类
 * 
 * 功能:静态代理类
 * 本类实现StaticProxy_Interface接口,对数据库的每一个操作,都需要留下日志痕迹
 * 
 * @author lijl 
 * */
public class StaticProxy implements StaticProxy_Interface {
	//由于需要对数据库的增删改查等操作留下日志,那么需要传递进来对数据库进行操作的业务逻辑类,即委托类对象staticproxy_impl
	private StaticProxy_Impl staticproxy_impl;
	public StaticProxy(StaticProxy_Impl staticproxy_impl){
		this.staticproxy_impl = staticproxy_impl;
	}
	@Override
	
	public void Insert() {
		// TODO Auto-generated method stub
		System.out.println("StaticProxy.Insert()..begin..");
		staticproxy_impl.Insert();//对插入数据库操作,前后加入begin end 日志
		System.out.println("StaticProxy.Insert()..end..");
	}

	@Override
	public void Delete() {
		// TODO Auto-generated method stub
		System.out.println("StaticProxy.Delete()..begin..");
		staticproxy_impl.Delete();//对删除数据库操作,前后加入begin end 日志
		System.out.println("StaticProxy.Delete()..end..");
	}

	@Override
	public void Update() {
		// TODO Auto-generated method stub
		System.out.println("StaticProxy.Update()..begin..");
		staticproxy_impl.Update();//对更新数据库操作,前后加入begin end 日志
		System.out.println("StaticProxy.Update()..end..");
	}

	@Override
	public void Select() {
		// TODO Auto-generated method stub
		System.out.println("StaticProxy.Select()..begin..");
		staticproxy_impl.Select();//对查询数据库操作,前后加入begin end 日志
		System.out.println("StaticProxy.Select()..end..");

	}

}


4、


package com.proxy.static_proxy;
/*
 * 演示静态代理类
 * 
 * 功能:主函数,执行静态代理类(执行委托类并且带日志功能)
 * 
 * 1、创建委托类(业务逻辑类)对象
 * 2、创建静态代理类对象,将委托类对象作为参数,传递到StaticProxy构造方法中
 * 
 * @author lijl 
 * */
public class StaticProxy_main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		StaticProxy_Impl spi = new StaticProxy_Impl();
		StaticProxy sp = new StaticProxy(spi);
		sp.Insert();
		sp.Select();
		sp.Update();
		sp.Delete();
		
		
	}

}



总结:从以上例子中就可以看出静态代理类的功能,

 这里举一个比较形象的例子,比如有三个对象:思科服务器生产商、服务器代理商、用户
  
  1、用户想要去买思科服务器,当然也需要售后的保障(思科服务器好比StaticProxy_Interface接口类)
  2、用户最终要的结果是:买,那么买,那么以面向对象的思维看待StaticProxy_Interface接口,实际上就是StaticProxy_Interface接口需要有被人买的动作,那么这个接口就需要定义买的动作, 即本例中的增删改查
  3、那么思科服务器,从哪里来呢?首先思科服务器是由生产商生产的,那么肯定生产商要去实现StaticProxy_Interface接口,重写里面的方法,买的动作,即StaticProxy_Impl。
 
  4、由于思科生产商,自己不去单独卖服务器,需要去委托给代理商外卖,即将服务器交给代理商,而且代理商要给用户提供售后的服务,在本例中就是StaticProxy代理类,StaticProxy代理类中需要有StaticProxy_Impl生产商给的服务器对象即设计StaticProxy时,构造方法需要传递服务器StaticProxy_Impl并且对思科服务器的每一个产品,进行售后服务,即代理类StaticProxy中的增删改方法中需要有日志功能
 
  5、当用户去买服务器的时候,即main函数,去代理商StaticProxy这里买,前提供货商StaticProxy_Impl需要把服务器交给代理商StaticProxy



 -------android培训JAVA培训、期待与您交流! ----------

--------详细请查看www.itheima.com-------------


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值