- 浏览: 723680 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (1044)
- 数据结构 (36)
- UML与设计模式 (42)
- c++ (87)
- rust (36)
- Qt (41)
- boost模板元编程 (43)
- Linux (77)
- 汇编 (4)
- 其它 (2)
- 烹饪 (3)
- unix c / socket (73)
- 软件工程 (4)
- shell (52)
- Python (37)
- c++ primer 5th(c++11) (22)
- 数据库/MySQL (27)
- 数据存储 (4)
- lisp (7)
- git (4)
- Utility (3)
- CDN与DNS (54)
- Http (53)
- php (7)
- nginx/lua/openresty (41)
- redis (11)
- TCP/IP (16)
- 互联网 (6)
- kernel (2)
- go (34)
- 区块链 (43)
- 比特股 (13)
- 以太坊 (23)
- 比特币 (23)
- 密码学 (10)
- EOS (53)
- DAG (1)
- docker (1)
- filecoin (7)
- solidity (65)
- ipfs (8)
- 零知识证明 (1)
- openzeppelin (3)
- java (1)
- defi (7)
最新评论
代理模式:为另一个对象提供一个替身或占位符以控制这个对象的访问。
(为其它对象提供一种代理以控制对这个对象的访问)
要点:
1.远程代理管理客户和运程对象之间的交互
2.虚拟代理控制访问实例化开销大的对象
3.保护代理基于调用者控制对象方法的访问
4.代理模式有许多变体,例如:缓存代理,同步代理,防火墙代理和写入时复制代理
5.代理在结构上类似装饰者,但是目的不同
6.装饰者模式为对象加上了行为,而代理则是控制访问
7.和其它的包装者(wrapper)一样,代理会造成你设计中类的数目增加
应用场景:
1.远程代理:为一个对象在不同的地址空间提供局部代理.这样可以隐藏一个对象存在于不同地址空间的事实
2.虚拟代理:是根据需要创建开销很大的对象.通过它来存放实例化需要很长时间的真实对象
3.安全代理:用来控制真实对象访问的权限,用于对象有不同的访问权限的时候
4.智能指引:指当调用真实的对象时,代理处理另外一些事,如计算真实对象的引用次数,这样当该对象没有引用时,可以自动释放它;或当第一次引用一个持久对象时,将它装入内存;或在访问一个实际对象前,检查是否已经锁定它,以确保其他对象不能改变它.它们都是通过代理在访问一个对象时附加一些内存处理(ps:智能指针的实现是用的代理模式?回头再看下boost的源码吧,有点忘了)
强制代理:
(为其它对象提供一种代理以控制对这个对象的访问)
要点:
1.远程代理管理客户和运程对象之间的交互
2.虚拟代理控制访问实例化开销大的对象
3.保护代理基于调用者控制对象方法的访问
4.代理模式有许多变体,例如:缓存代理,同步代理,防火墙代理和写入时复制代理
5.代理在结构上类似装饰者,但是目的不同
6.装饰者模式为对象加上了行为,而代理则是控制访问
7.和其它的包装者(wrapper)一样,代理会造成你设计中类的数目增加
应用场景:
1.远程代理:为一个对象在不同的地址空间提供局部代理.这样可以隐藏一个对象存在于不同地址空间的事实
2.虚拟代理:是根据需要创建开销很大的对象.通过它来存放实例化需要很长时间的真实对象
3.安全代理:用来控制真实对象访问的权限,用于对象有不同的访问权限的时候
4.智能指引:指当调用真实的对象时,代理处理另外一些事,如计算真实对象的引用次数,这样当该对象没有引用时,可以自动释放它;或当第一次引用一个持久对象时,将它装入内存;或在访问一个实际对象前,检查是否已经锁定它,以确保其他对象不能改变它.它们都是通过代理在访问一个对象时附加一些内存处理(ps:智能指针的实现是用的代理模式?回头再看下boost的源码吧,有点忘了)
#include<iostream> using namespace std; class A{ private: int num; public: A(int n):num(n){} int getNum()const{ return num; } }; class AProxy{ private: A* a; public: AProxy(A* aa):a(aa){} int getNum()const{ return a->getNum(); } }; int main(){ AProxy *proxy = new AProxy(new A(10)); cout << proxy->getNum() << endl; }
强制代理:
#include <iostream> using namespace std; class DB{ public: DB(){} virtual ~DB(){} virtual int add()=0; virtual int del()=0; }; class MySQLDB:public DB { public: int add() { cout << "mysql add" << endl; return 0; } int del() { cout << "mysql del" << endl; return 0; } }; class OracleDB:public DB { public: int add() { cout << "oracle add" << endl; return 0; } int del() { cout << "oracle del" << endl; return 0; } }; class DBProxy { public: static DBProxy* getInstance() { static DBProxy dbProxy; return &dbProxy; } void setDB(DB* db){ mDB = db; } int add() { if(mDB==NULL) { cout << "无法add,请设置db" << endl; return -1; } return mDB->add(); } int del() { if(mDB==NULL) { cout << "无法del,请设置db" << endl; return -1; } return mDB->del(); } private: DBProxy(){ mDB = NULL; } private: DB* mDB; }; int main() { DBProxy* dbProxy = DBProxy::getInstance(); dbProxy->add(); dbProxy->del(); dbProxy->setDB(new MySQLDB); dbProxy->add(); dbProxy->del(); dbProxy->setDB(new OracleDB); dbProxy->add(); dbProxy->del(); } 无法add,请设置db 无法del,请设置db mysql add mysql del oracle add oracle del
发表评论
-
桥接模式(Bridge)
2014-09-26 15:34 773桥接模式:将抽象与实现解耦,使得两者可以独立地变化,抽象部分的 ... -
访问者模式(Visitor)
2014-08-03 13:59 803访问者模式(Visitor),表示一个作用于某对象结构中的各元 ... -
解释器模式(interpreter)
2014-08-03 13:55 644解释器模式(interpreter),给定一个语言,定义它的方 ... -
享元模式(Flyweight)
2014-08-02 09:31 597享元模式(Flyweight):运用共享技术有效地支持大量细粒 ... -
中介者模式(Mediator)
2014-08-02 09:26 418中介者模式(Mediator):用一个中介对象来封装一系列的对 ... -
职责链模式(Responsibility)
2014-07-31 20:36 546职责链模式(Chain of Responsibility): ... -
合成/聚合利用原则
2014-07-29 20:56 553合成/聚合利用原则:尽量使用合成/聚合,尽量不要使用类继承 ... -
组合模式(Composite)
2014-07-27 10:15 402组合模式(Composite):将对象组合成树形结构以表示'部 ... -
备忘录模式(Memento)
2014-07-26 09:09 536备忘录(Memento):在不破坏封装性的前提下,捕获一个对象 ... -
事件委托(delegate)
2014-07-23 20:53 572委托机制的本质就是调用成员函数的函数指针,实现回调 委托就是 ... -
建造者模式(Builder)
2014-07-23 20:45 535建造者模式(Builder):将一个复杂对象的构建与它的表示分 ... -
外观模式(facade)
2014-07-20 09:31 584外观模式(facade):为子系统中的一组接口提供一个一致的界 ... -
迪米特法则
2014-07-19 18:23 364迪米特法则:如果两个类不必彼此直接通信,那么这两个类就不应当发 ... -
原型模式
2014-07-16 20:34 465原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型创 ... -
里氏代换
2014-07-12 09:43 305里氏代换:一个软件实体如果使用的是一个父类的话,那么一定适用于 ... -
依赖倒转
2014-07-12 09:39 362依赖倒转:抽象不应该依赖细节,细节应该依赖抽象,说白了就是针对 ... -
开放-封闭原则
2014-07-12 09:33 522开放-封闭原则:是说软件实体(类,模块,函数等等)应该可以扩展 ... -
单一职责
2014-07-12 09:26 529单一职责原则(SRP),就一个类而言,应该仅有一个引起它变化的 ... -
MVC
2011-07-21 17:32 977MVC是一种复合模式,结合了观察者,策略模式和组合模式。 要 ... -
状态模式(State)
2011-07-13 17:33 841状态模式:允许对象在内部状态改变时改变它的行为,对象看起来好像 ...
相关推荐
全部高质量代理模式proxy的java源程序 java.proxy,代理模式源码,设计模式,apache开源项目源码commons-proxy-1.0-src 各种代理模式操作的工具类源码以及代理模式案例源码,你会从中得到意想不到的效果! apache...
为其他对象提供一个代理以控制对这个对象的访问。
在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。 在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。
代码仅供参考学习 。
NULL 博文链接:https://wy649898543.iteye.com/blog/1431997
java 代理模式demo ,主要就是对代理模式的一种实现过程,用于刚接触代理模式的人使用,里面介绍了两种代理模式,一种是静态代理,另一种是动态代理的实现Demo
设计模式C++学习之代理模式(Proxy)
2、代理模式(Proxy) 用意:为其它对象提供一种代理以控制对这个对象的访问
C#写的一份包含代理模式Proxy的基本实现代码和一个应用案例代码,有助于Proxy的理解和学以致用。
Android设计模式之代理模式(Proxy Pattern)
代理模式也是平时比较常用的设计模式之一,代理模式其实就是提供了一个新的对象,实现了对真实对象的操作,或成为真实对象的替身.在日常生活中也是很常见的.例如A要租房,为了省麻烦A会去找中介,中介会替代A去筛选房子,A...
2、代理模式PROXY PATTERN 3、单例模式SINGLETON PATTERN 4、多例模式MULTITION PATTERN 5、工厂方法模式FACTORY METHOD PATTERN 6、抽象工厂模式ABSTRACT FACTORY PATTERN 7、门面模式FACADE PATTERN 8、适配器...
代理模式java代码 Proxy(4) 开发宝典......
观察者模式 Observer:Swing中的事件模型 工厂模式 Factory:在JDK中遍地都是,比如JDBC、JNDI等,是...Strategy:java.util.Comparator就用到了它 代理模式 Proxy:学习Spring IoC容器必须掌握的模式 <br>
JAVA Proxy 代理模式
Proxy代理模式的经典实例(很有面向对象思想哦)。快速学会Proxy代理模式.
代理模式java代码 Proxy(1) java 学习必备......
java 代理模式实现代码及设计详解:动态代理模式、静态代理模式
Proxy Pattern 代理模式 采用JAVA实现,可以下载看看。
代理模式是一种设计模式,其定义是为其他对象提供一种代理以控制对这个对象的访问。 代理模式的核心在于提供一个代理来控制和限制对另一个对象的直接访问。这种模式通常用于以下几种情况: 远程代理:当对象位于...