由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - Proxy, Decorator, Adapter, and Bridge
相关主题
python decorator 调用问题如果要做一个铁路售票网站
java比js难多了Node已经成为enterprise的go-to technology了
[求助]Metlab做adaptive filter的问题Data Engineer @ ADP data team
求 adaptive Huffman coding, C or C++ 源码问个能提供video streaming服务的网站的设计问题
c++ 两个库接口冲突ubuntu wifi连接问题
算法之极弱问[bssd] neural network in 1960
The Connected Company页面上有没可能判断访问者用没用代理服务器?
Clojure Storm 用在生产环境中如何?股的霸强劲出手
相关话题的讨论汇总
话题: adapter话题: proxy话题: bridge话题: decorator话题: object
进入Programming版参与讨论
1 (共1页)
q****x
发帖数: 7404
1
这个帖子的描述还是抽象。谁能给些例子啊?
http://stackoverflow.com/questions/350404/how-do-the-proxy-deco
Proxy, Decorator, Adapter, and Bridge are all variations on "wrapping" a
class. But their uses are different.
Proxy could be used when you want to lazy-instantiate an object, or hide the
fact that you're calling a remote service, or control access to the object.
Decorator is also called "Smart Proxy." This is used when you want to add
functionality to an object, but not by extending that object's type. This
allows you to do so at runtime.
Adapter is used when you have an abstract interface, and you want to map
that interface to another object which has similar functional role, but a
different interface.
Bridge is very similar to Adapter, but we call it Bridge when you define
both the abstract interface and the underlying implementation. I.e. you're
not adapting to some legacy or third-party code, you're the designer of all
the code but you need to be able to swap out different implementations.
Facade is a higher-level (read: simpler) interface to a subsystem of one or
more classes. Think of Facade as a sort of container for other objects, as
opposed to simply a wrapper.
p*****2
发帖数: 21240
2
我以前不是说了吗?很多pattern在实际中都是同一个东西。我们都没分那么清楚。
z****e
发帖数: 54598
3
从最简单的facade开始说
facade就是一个统一的对外包接口
当然这个接口要有实现的部分
但是对于不同的组件而言,其它人要是想操作这些组件的话
只需要跟这一个接口打交道就行了
比如你有apple和oragne两个东西
那么你自己定义了一个fruit接口
那么这个接口提供了getApple和getOrange两个方法
那么你就不需要单独滴去跟apple还有orange相关类打交道
每次要找fruit,直接找这个接口就好了
proxy就是一个代理
举个例子,比如你想跟另外一台机器上的jvm打交道
那么每次你都需要向那台机器发送各种请求
那么一个很直接的想法就是,我在本机制造一个对象,并假设这个对象就是那台机器
然后所有跟这个机器打交道的操作,我给封装到这个对象里面去
那么这个对象就是代理,这个在rmi时候用得比较多
stub和skeleton,stub就是代理,remote接口就是一个代理
q****x
发帖数: 7404
4
比如说下面的代码到底是哪个模式?
class X {
public:
virtual ~X() = 0;
virtual void foo() {}
}
class X_Wrapper: public X {
public:
~X_Wrapper() {}
void foo() { x_->foo(); }
private:
X* x_;
}

the
object.

【在 q****x 的大作中提到】
: 这个帖子的描述还是抽象。谁能给些例子啊?
: http://stackoverflow.com/questions/350404/how-do-the-proxy-deco
: Proxy, Decorator, Adapter, and Bridge are all variations on "wrapping" a
: class. But their uses are different.
: Proxy could be used when you want to lazy-instantiate an object, or hide the
: fact that you're calling a remote service, or control access to the object.
: Decorator is also called "Smart Proxy." This is used when you want to add
: functionality to an object, but not by extending that object's type. This
: allows you to do so at runtime.
: Adapter is used when you have an abstract interface, and you want to map

q****x
发帖数: 7404
5
还是想分个清楚,增加理解。

【在 p*****2 的大作中提到】
: 我以前不是说了吗?很多pattern在实际中都是同一个东西。我们都没分那么清楚。
z****e
发帖数: 54598
6
decorator的话
如果你有一个现成的类,然后你想继续开发
但是又不想破坏这个现有的类
怎么办?在这个基础之上额外加一个类
并把新增方法放到这个新增的类里面去
这样就保证了原有类的独立,又新增了额外的部分
这就是decorator,装饰
z****e
发帖数: 54598
7
adapter是两个不同格式的接口之间的转换
这个很容易理解
你现实中肯定用过adapter,国内买的电脑,插头经常用不了
你会买一个转换插头,那个就是adapter
bridge用得最多的是jdbc
p*****2
发帖数: 21240
8

要想理解最好看看书吧?我上次看了,不过又忘了。

【在 q****x 的大作中提到】
: 还是想分个清楚,增加理解。
c******o
发帖数: 1277
9
我看了你引的文,讲得挺清楚啊,没啥可补充的。。
我有一个class oo
我想lazy val那么 做一个 class ooProxy
ooProxy oop = new ooProxy
oop这时候是一个空的标签,直到你用的时候里面的东西,一个oo在oop里被自动生成了
给你用。
要是我要用一个oo里没有的method x,但是还想用其他oo的method,那就做
ooDecorator ood = new ooDecorator
这个ood里面有一个oo,还有一个oo没有的x method,你对ood可以用oo的methed(自动转
给oo),也可以用x
网上的例子太多了,自己google 就行了
q****x
发帖数: 7404
10
什么是“不同格式的接口”?能举个例子吗?

【在 z****e 的大作中提到】
: adapter是两个不同格式的接口之间的转换
: 这个很容易理解
: 你现实中肯定用过adapter,国内买的电脑,插头经常用不了
: 你会买一个转换插头,那个就是adapter
: bridge用得最多的是jdbc

q****x
发帖数: 7404
11
我自己那个例子是adaptor吗?

【在 c******o 的大作中提到】
: 我看了你引的文,讲得挺清楚啊,没啥可补充的。。
: 我有一个class oo
: 我想lazy val那么 做一个 class ooProxy
: ooProxy oop = new ooProxy
: oop这时候是一个空的标签,直到你用的时候里面的东西,一个oo在oop里被自动生成了
: 给你用。
: 要是我要用一个oo里没有的method x,但是还想用其他oo的method,那就做
: ooDecorator ood = new ooDecorator
: 这个ood里面有一个oo,还有一个oo没有的x method,你对ood可以用oo的methed(自动转
: 给oo),也可以用x

q****x
发帖数: 7404
12
我有一个class oo
我想lazy val那么 做一个 class ooProxy
ooProxy oop = new ooProxy
oop这时候是一个空的标签,直到你用的时候里面的东西,一个oo在oop里被自动生成了
给你用。
class ooProxy看起来是什么样的?
要是我要用一个oo里没有的method x,但是还想用其他oo的method,那就做
ooDecorator ood = new ooDecorator
这个ood里面有一个oo,还有一个oo没有的x method,你对ood可以用oo的methed(自动转
给oo),也可以用x
你这个例子不能用继承吗?子类加一个父类没有的method。

【在 c******o 的大作中提到】
: 我看了你引的文,讲得挺清楚啊,没啥可补充的。。
: 我有一个class oo
: 我想lazy val那么 做一个 class ooProxy
: ooProxy oop = new ooProxy
: oop这时候是一个空的标签,直到你用的时候里面的东西,一个oo在oop里被自动生成了
: 给你用。
: 要是我要用一个oo里没有的method x,但是还想用其他oo的method,那就做
: ooDecorator ood = new ooDecorator
: 这个ood里面有一个oo,还有一个oo没有的x method,你对ood可以用oo的methed(自动转
: 给oo),也可以用x

1 (共1页)
进入Programming版参与讨论
相关主题
股的霸强劲出手c++ 两个库接口冲突
sgi stl 源代码一问算法之极弱问
template class instantiation问题The Connected Company
interview questionsClojure Storm 用在生产环境中如何?
python decorator 调用问题如果要做一个铁路售票网站
java比js难多了Node已经成为enterprise的go-to technology了
[求助]Metlab做adaptive filter的问题Data Engineer @ ADP data team
求 adaptive Huffman coding, C or C++ 源码问个能提供video streaming服务的网站的设计问题
相关话题的讨论汇总
话题: adapter话题: proxy话题: bridge话题: decorator话题: object