Java学习~静态代理

java中的代理模式:

*定义:给目标对象提供一个代理对象,并且由代理对象控制对目标对象的引用

*目的:①:通过代理对象的方式间接的访问目标对象,防止直接访问目标对象给系统带来不必要                的复杂性

            ②:通过代理业务对原有业务进行增强

java当中有三种方式来创建代理对象:静态代理基于jdk(接口)的动态代理基于CGLLIB(父类)的动态代理。

相关概念:

        目标类:原对象,我们需要代理对象控制他的访问,拓展其功能。

        代理类:代理模式产生的对象,是原对象“替身”,已经在原有基础上修改逻辑

-------------------------------------------------------------------------------------------------------------------------------- 

静态代理:

编写代理类:实现目标的接口或者直接继承目标类,完成逻辑的修改

接口实现方式:目标类接口,目标类,代理类。目标类和代理类都必须实现目标接口当中所实现的方法,从某种意义上代理类就可以帮我们实现目标类当中的方法,并且代理类还可以有自己的扩展方法。

例子:买商品,原本直接去商品制造的工厂买。

           现在我找代购的买,不直接找工厂了。并且代购方还会有许多其他服务。

         对用户来说,就只是 买商品这个功能,我能买到就行,通过代购我还能有其他服务。何乐而不为?

 定义一个接口,相当于 商品生产这个功能

public interface Goods {
	void goods(String size);
}

定义一个目标类,实现这个接口,原本直接买商品的地方 也是 生产这个商品的地方

public class Factory implements Goods {
	@Override
	public void goods(String size) {
		System.out.println("生产出大小为"+size+"的商品");
	}
}

 定义一个代理类,代购

public class Proxy implements Goods {
	
	//被包含的真是对象
	public Factory factory;
	
	//构造函数
    public Proxy(Factory factory) {
		 // TODO Auto-generated constructor stub
		this.factory = factory;
	}
	
	@Override
	public void goods(String size) {
		factory.goods(size);
        OtherA();
		OtherB();
		
	}
	
//下方就是对目标类的功能的拓展。根据自己需求写

	//其他功能
	public void OtherA() {
		System.out.println("功能A");
	}

	//其他功能
	public void OtherB() {
		System.out.println("功能B");
	}
}

main函数 ,买商品的人

public class Test {
	public static void main(String[] args) {
	    Factory factory = new Factory();
		Proxy proxy = new Proxy(factory);
		proxy.goods("XXl");
	}
}

目标对象必须实现我们的接口,同时代理对象也必须实现这一接口

---------------------------------------------------------------------------------------------------------------------------------

静态代理存在的问题

违反了开闭原则:

程序对访问开放,对修改关闭,当需求发生变化时,可以增加新模块来解决新需求,而不是改变原来的代码来解决新需求

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值