java 设计模式 (代理模式和装饰者模式的区别)
2016-11-28 10:16
405 查看
废话不多说,直接上代码:
public interface Sourceable {
public void method();
}
public class Source implements Sourceable {
@Override
public void method() {
System.out.println("I am the source");
}
}
这里是一个代理类:
public class Proxy implements Sourceable {
private Source source;
public Proxy(){
super();
this.source = new Source();
}
@Override
public void method() {
before();
source.method();
atfer();
}
private void atfer() {
System.out.println("after proxy!");
}
private void before() {
System.out.println("before proxy!");
}
}
这里是一个装饰类:
public class Decorator implements Sourceable {
private Sourceable source;
public Decorator(Sourceable source){
super();
this.source = source;
}
@Override
public void method() {
System.out.println("before decorator!");
source.method();
System.out.println("after decorator!");
}
public static void main(String[] args) {
Sourceable source = new Source();
Sourceable obj = new Decorator(source);
obj.method();
}
}
这两个类,乍一看,好像差不多啊,实现的功能也差不多。
如果说有什么不一样的地方,无非就是构造函数的时候,一种是自己生成了一个(代理),一种是传进来一个。
我们该怎么理解这样的不同呢?或者说2种模式分别是用于什么样的场景?
语义,我们还是从语义的层面上,来理解这个问题。
笔者最近正在卖房,就拿这个举例吧,我有套房,要卖,可是本身我事情比较多,或者我在外地,那么我可以去公证处做个公正,让另外一个人全权代理我在卖房过程中的各种事情。那么对于买家而言,他是见不到我的,他见到的只是我的代理人。这就是代理。
那么装饰呢,可以这么理解,我要卖房,可是我没啥经验,所以我找了个明白人,在卖房的过程中,一直陪着我,过程中给我出谋划策,让我在这个过程当中规避掉一些风险。这就是装饰。
那么具体到代码上,什么时候用装饰,什么时候用代理,简单地说,如果你的被代理对象是不方便出面的,那就用代理,如果你不介意让别人知道他是谁,那就用装饰者。
设计模式,按照我的理解,它的命名和使用,一方面当然是你的代码结构更加优雅,具有更好的可扩展性,还有一方面也是很重要的原因,便于其他人的理解,换句话说,我们可以把设计模式,当做,面向对象世界当中的一组高级的、通用的原语,在大家对设计模式都有了充分的理解的基础上,大家对一组词汇,应该是有着差不多的理解。
如果大家对一些开源的源码有一定了解的话,会发现,如果你对设计模式有了一些了解,那么在你读源码的过程当中,会变得轻松很多,因为这个相当于,人家要说啥,你很容易就明白了!
public interface Sourceable {
public void method();
}
public class Source implements Sourceable {
@Override
public void method() {
System.out.println("I am the source");
}
}
这里是一个代理类:
public class Proxy implements Sourceable {
private Source source;
public Proxy(){
super();
this.source = new Source();
}
@Override
public void method() {
before();
source.method();
atfer();
}
private void atfer() {
System.out.println("after proxy!");
}
private void before() {
System.out.println("before proxy!");
}
}
这里是一个装饰类:
public class Decorator implements Sourceable {
private Sourceable source;
public Decorator(Sourceable source){
super();
this.source = source;
}
@Override
public void method() {
System.out.println("before decorator!");
source.method();
System.out.println("after decorator!");
}
public static void main(String[] args) {
Sourceable source = new Source();
Sourceable obj = new Decorator(source);
obj.method();
}
}
这两个类,乍一看,好像差不多啊,实现的功能也差不多。
如果说有什么不一样的地方,无非就是构造函数的时候,一种是自己生成了一个(代理),一种是传进来一个。
我们该怎么理解这样的不同呢?或者说2种模式分别是用于什么样的场景?
语义,我们还是从语义的层面上,来理解这个问题。
笔者最近正在卖房,就拿这个举例吧,我有套房,要卖,可是本身我事情比较多,或者我在外地,那么我可以去公证处做个公正,让另外一个人全权代理我在卖房过程中的各种事情。那么对于买家而言,他是见不到我的,他见到的只是我的代理人。这就是代理。
那么装饰呢,可以这么理解,我要卖房,可是我没啥经验,所以我找了个明白人,在卖房的过程中,一直陪着我,过程中给我出谋划策,让我在这个过程当中规避掉一些风险。这就是装饰。
那么具体到代码上,什么时候用装饰,什么时候用代理,简单地说,如果你的被代理对象是不方便出面的,那就用代理,如果你不介意让别人知道他是谁,那就用装饰者。
设计模式,按照我的理解,它的命名和使用,一方面当然是你的代码结构更加优雅,具有更好的可扩展性,还有一方面也是很重要的原因,便于其他人的理解,换句话说,我们可以把设计模式,当做,面向对象世界当中的一组高级的、通用的原语,在大家对设计模式都有了充分的理解的基础上,大家对一组词汇,应该是有着差不多的理解。
如果大家对一些开源的源码有一定了解的话,会发现,如果你对设计模式有了一些了解,那么在你读源码的过程当中,会变得轻松很多,因为这个相当于,人家要说啥,你很容易就明白了!
相关文章推荐
- 设计模式之代理模式和装饰者模式的区别(java)
- java 设计模式中 装饰者模式 与 代理模式的区别
- java设计模式之装饰模式代理模式区别
- Java 代理模式和装饰者模式的区别
- Java 代理模式和装饰者模式的区别
- 设计模式(2)--java动态代理及jdk和cglib的区别
- Java 代理模式和装饰者模式的区别
- Java 代理模式和装饰者模式的区别
- Java 代理模式和装饰者模式的区别
- Java 代理模式和装饰者模式的区别
- Java 代理模式和装饰者模式的区别
- Java编程开发设计模式之--装饰者模式(Decorator)与代理模式(Proxy)
- java设计模式--代理模式--三种代理方式的区别
- Java 代理模式和装饰者模式的区别
- JAVA设计模式:代理模式&& 装饰模式区别
- 设计模式——代理模式介绍及与装饰者模式的区别
- java设计模式——装饰者模式(代理模式)
- Java经典23种设计模式之结构型模式(三)------附代理模式、适配器模式、外观模式区别
- Java 代理模式和装饰者模式的区别
- Java模式之装饰者模式&代理模式 装饰模式与代理模式区别