1. 两种模式都创建了一个接口;
2. 两种模式都创建了一个原始类并实现了上边的接口;
3. 两种模式都创建了另外一个类并实现上边的接口且将原始类作为其一个成员变量。 该类在代理模式中称为代理类, 而在装饰模式中成为装饰类
1. 代理类中会添加额外的私有方法并被接口方法调用,可以在接口方法调用前和调用后对输入参数或输出结果加以控制;
2. 而装饰模式没有添加额外的私有方法,而是在接口方法中直接添加一些功能并调用成员对象的接口方法,以起到丰富成员对象的方法。
package com.design.pattern.structure.decorator;
public interface ISourceable {
public void method();
}
package com.design.pattern.structure.decorator.impl;
import com.design.pattern.structure.decorator.ISourceable;
public class Source implements ISourceable {
@Override
public void method() {
System.out.println("Source.....");
}
}
package com.design.pattern.structure.decorator.impl;
import com.design.pattern.structure.decorator.ISourceable;
public class Decorator implements ISourceable{
private ISourceable source;
public Decorator(ISourceable source) {
super();
this.source = source;
}
@Override
public void method() {
System.out.println("Before decorator");
this.source.method();
System.out.println("After decorator");
}
}
代理模式代码:
package com.design.pattern.structure.proxy;
public interface Sourceable {
public void method();
}
package com.design.pattern.structure.proxy.impl;
import com.design.pattern.structure.proxy.Sourceable;
public class Source implements Sourceable {
@Override
public void method() {
System.out.println("This is a original method!!");
}
}
package com.design.pattern.structure.proxy.impl;
import com.design.pattern.structure.proxy.Sourceable;
public class Proxy implements Sourceable {
private Source source;
public Proxy(Source source) {
super();
this.source = source;
}
@Override
public void method() {
before();
source.method();
after();
}
private void before() {
System.out.println("Do something before calling the original method");
}
private void after() {
System.out.println("Do something after calling the original method");
}
}
以上就是关于“代理模式和装饰模式的区别”介绍,大家如果想了解更多相关知识,可以关注一下极悦的Java设计模式,里面有更丰富的知识等着大家去学习,希望对大家能够有所帮助哦。
你适合学Java吗?4大专业测评方法
代码逻辑 吸收能力 技术学习能力 综合素质
先测评确定适合在学习