代理(proxy )

代理

  静态代理

 共同接口:一个就够。里面含有所有对象共有的方法
  真实对象:可以多些,重写接口的方法
  代理对象:创建真实对象


可以功能拓展,只能加不能修改。在不修改源代码的情况下。实现非侵入。

可以多建对接共同接口的实现类,但代理对象不要动

代理与工厂的显著不同之处就是代理是实现功能扩展,工厂是制造对象

看例子,卖书的例子,共同接口,批发商

public interface Press {
	void sellingBooks();
}

卖书的普通店铺实现接口的方法

//实现类  -真实对象 普通书店
public class PressImpl implements Press{

	@Override
	public void sellingBooks() {
		System.out.println("publishing house sell books");
		
	}

}

卖书的新华店铺实现接口的方法

//实现类  -真实对象 新华书店

public class XinHuaImpl implements Press {

	@Override
	public void sellingBooks() {
		System.out.println("sell Xinhua book");

	}

}

最后实例对象,书谱

//实例对象-实现类
public class Bookestore implements Press {
	private Press press=null;
	public  Bookestore(Press press1) {//使用构造方法选择并实现真实对象
		this.press =press1;
	}
public void sellingBooks() {
			discount();
		press.sellingBooks();
		System.out.println("present discount ticket");

	}

	
		public void discount() {
			System.out.println("today boss is happy,sell at a discount");
		}
}

测试类

public class Test01 {

		public static void main(String[] args) {
		Press press =new Bookestore(new RiYueImpl());
		press.sellingBooks();
		}
}


动态代理

如果书店变成超市怎么实现?

明显不是一个书店批发商的共同接口就可以实现的。这时就需要引入动态代理

首先写一个水果的共同接口

public interface Apple {
	void sellA();
}


水果我们就卖灵宝苹果,接下来是灵宝苹果的真实对象

public class LingBaoAppleImpl implements Apple {

	@Override
	public void sellA() {
	System.out.println("sell ling bao Apple");

	}

}

动态代理与静态最大的区别就在代理对象上,需要对接InvocationHandler(动态代理)接口

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

public class Supermarket2  implements InvocationHandler{//动态代理invocationHandler-JDK  offer
private Object obj=null;

public Supermarket2(Object obj) {
	
	this.obj = obj;
}
private void discout() {
	System.out.println("discout");
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
	discout();
	Object  ob=method.invoke(obj, args);

	return ob;
}


}

test类的写法需要引入proxy(代理)的类

public class Test02 {
public static void main(String[] args) {
	Supermarket s=new Supermarket(new LingBaoAppleImpl());
	Apple xhi=(Apple) Proxy.newProxyInstance(s.getClass().getClassLoader(), new Class[] {Apple.class}, s);
xhi.sellA();//proxy代理人

	
	
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值