首页 新闻 搜索 专区 学院

装饰设计模式与静态代理设计模式的区别

0
悬赏园豆:5 [待解决问题]

这是一个装饰设计模式的代码:
public class DecoratorTest01 {
public static void main(String[] args) {
new Amplifier(new Person(10)).say();
}
}
interface Say{
void say();
}
class Person implements Say{
int voice;
public Person(int voice) {
this.voice = voice;
}
public void say() {
System.out.println("人的声音为:" + voice);
}
}
class Amplifier implements Say{
Person p;
public Amplifier(Person p) {
this.p = p;
}
public void say() {
System.out.println("人的声音为:" + p.voice * 10);
}
}

这是多线程静态代理设计模式的代码:
public class Test01{
public static void main(String[] args) {
new Thread(new Test()).start();
}
}
class Test implements Runnable{
public void run() {
System.out.println("多线程静态代理设计模式");
}
}
这是jdk1.8中多线程静态代理部分源码:
public interface Runnable {
public abstract void run();
}
public class Thread implements Runnable {
private Runnable target;
public Thread(Runnable target) {
init(null, target, "Thread-" + nextThreadNum(), 0);
}
public void run() {
if (target != null) {
target.run();
}
}
}

他们的类的实现,以及方法的调用几乎是一样的

任岁月荏苒的主页 任岁月荏苒 | 初学一级 | 园豆:197
提问于:2020-09-19 18:17
< >
分享
所有回答(2)
0

设计模式建议你看看园内左潇龙写的博客。地址:https://www.cnblogs.com/zuoxiaolong/p/pattern26.html

不安分的黑娃 | 园豆:205 (菜鸟二级) | 2020-09-19 23:55
0

设计模式体现的是一种设计思想。

代理模式和装饰模式。
两者都会持有代理对象或装饰对象。
方法的实现看起来一样,但是思想有差异。
装饰对象是为了让对象更强,基础重心还是装饰对象。

代理对象可以让对象更强,更弱,或者直接替换掉对象。重心相对来说已经从 被代理对象 转移到 代理对象自己了。

举个例子。喝橙汁。
如果你是想在喝橙汁的 前后 时候做一些事情,比如喝前摇一摇,喝后赞一声真好喝,
但是核心是喝橙汁动作不变,只是加了一些其它的动作,这就是装饰。注意核心喝橙汁没变。

代理模式当然也可以实现上面的功能,但更多是我要代替你完成喝橙汁这个动作,我可以喝啤酒替代你喝橙汁。
重点已经转移到我代理你干什么,而不是原来的喝橙汁了。

大概是这个意思吧,个人理解。。

WMG-Eight | 园豆:949 (小虾三级) | 2020-09-21 10:23
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册