[#0x0016] 代理

本文介绍了软件设计中的三种基本类间关系:组合、继承和代理,并详细解释了代理模式的概念及其应用场景。通过实例展示了如何通过代理模式封装类接口,保护内部类不被直接访问。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  前文多次提到了代理(Proxy),那么到底什么才是代理呢?

  类和类之间有3种关系:组合、继承和代理。

  组合即是一个类包含另一个类的对象作为自己的一个field,如:

class A
{
	class B b = new B() ;
	......
}

  

  继承就不多说了。如果把接口看作abstract class的延伸的话,那么对接口的实现也可以看作继承。

 

  代理是组合的一种特殊形式。假设我们有上文的class A的对象a,如果要用class B提供的接口时,一般是a.b.function()或是a.b.field。如果我们这里不想暴露class B的接口的话,该怎么办?这时就可以用到代理。简单地说,代理就是重新封装class B的接口,使其成为class A的接口。如:

class A
{
	class B b = new B();

	void function()
	{
		b.function();
	}
}

这样,客户端程序员在使用class A时,就不能接触到class B的接口了。

(.venv) root@lujh:/xhs-toolkit# python test.py Traceback (most recent call last): File "/xhs-toolkit/test.py", line 12, in <module> driver = webdriver.Chrome(options=options) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/xhs-toolkit/.venv/lib/python3.12/site-packages/selenium/webdriver/chrome/webdriver.py", line 47, in __init__ super().__init__( File "/xhs-toolkit/.venv/lib/python3.12/site-packages/selenium/webdriver/chromium/webdriver.py", line 69, in __init__ super().__init__(command_executor=executor, options=options) File "/xhs-toolkit/.venv/lib/python3.12/site-packages/selenium/webdriver/remote/webdriver.py", line 257, in __init__ self.start_session(capabilities) File "/xhs-toolkit/.venv/lib/python3.12/site-packages/selenium/webdriver/remote/webdriver.py", line 356, in start_session response = self.execute(Command.NEW_SESSION, caps)["value"] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/xhs-toolkit/.venv/lib/python3.12/site-packages/selenium/webdriver/remote/webdriver.py", line 447, in execute self.error_handler.check_response(response) File "/xhs-toolkit/.venv/lib/python3.12/site-packages/selenium/webdriver/remote/errorhandler.py", line 232, in check_response raise exception_class(message, screen, stacktrace) selenium.common.exceptions.SessionNotCreatedException: Message: session not created from unknown error: no chrome binary at /usr/bin/google-chrome Stacktrace: #0 0x561016d4067a <unknown> #1 0x56101680ccd0 <unknown> #2 0x561016843947 <unknown> #3 0x561016841d58 <unknown> #4 0x561016891464 <unknown> #5 0x561016890b86 <unknown> #6 0x5610168829f3 <unknown> #7 0x56101684f534 <unknown> #8 0x561016850191 <unknown> #9 0x561016d07eef <unknown> #10 0x561016d0bf98 <unknown> #11 0x561016cef0f2 <unknown> #12 0x561016d0c73e <unknown> #13 0x561016cd60be <unknown> #14 0x561016d2ec68 <unknown> #15 0x561016d2ee78 <unknown> #16 0x561016d3f11c <unknown> #17 0x778646c94ac3 <unknown>
最新发布
06-25
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值