SpringCloud(一SpringCloud 基础)
Posted bzfsdr
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringCloud(一SpringCloud 基础)相关的知识,希望对你有一定的参考价值。
目录:
- 观察者模式
- 代理模式
观察者模式:
java实现了自己的观察者模式 >>> java.util.Observable;
1、public synchronized void addObserver(Observer o);添加一个观察者
2、public synchronized void deleteObserver(Observer o);删除一个观察者
3、protected synchronized void setChanged();修改通知标记,使得观察者观察的对象发生变化时能记得得知
4、public void notifyObservers(Object arg) ;通知观察者,被观察这已发生变化
1 public class ObserverDemo 2 3 public static void main(String[] args) 4 // 被观察的对象 5 MyObservable obs = new MyObservable(); 6 7 // 添加观察者 8 obs.addObserver((o, arg) -> System.out.println("服务列表发生了变化1:" + arg)); 9 10 Observer o = (o1, arg) -> System.out.println("服务列表发生了变化2:" + arg); 11 obs.addObserver(o); 12 13 obs.setServerList("192.168.110.1"); 14 15 obs.deleteObserver(o); 16 obs.setServerList("192.168.110.2"); 17 18 19 20 class MyObservable extends Observable 21 22 public void setServerList(String serverList) 23 this.setChanged(); 24 this.notifyObservers(serverList); 25 26
代理模式:
1、静态代理
代理就是将除了自己本身需要做的核心业务外的任务交给代理人来做,如明星将接广告等事情交给经纪人。
1 public class Client 2 public static void main(String[] args) 3 Teacher teacher = new ProxyDemo(new MathTeacher()); 4 teacher.teach(); 5 6 7 8 class ProxyDemo implements Teacher 9 private Teacher teacher; 10 11 public ProxyDemo(Teacher teacher) 12 this.teacher = teacher; 13 14 15 @Override 16 public void teach() 17 before(); 18 teacher.teach(); 19 after(); 20 21 22 public void before() 23 System.err.println("准备资料。。。"); 24 25 26 public void after() 27 System.err.println("布置作业。。。"); 28 29 30 31 interface Teacher 32 void teach(); 33 34 35 class MathTeacher implements Teacher 36 @Override 37 public void teach() 38 System.err.println("上数学课"); 39 40
静态代理的缺点是如果需要重新代理一个对象的话,上述代码都需要重弄一遍,这样非常繁琐且重复,所以便有了动态代理。
2、动态代理
1 public class Client 2 public static void main(String[] args) 3 Dynamic dynamic = new Dynamic(new MathTeacher()); 4 Teacher mathTeacher = (Teacher) dynamic.getProxyInstance(); 5 mathTeacher.teach(); 6 7 System.err.println("-----------------------"); 8 9 Dynamic dynamic2 = new Dynamic(new EnglishTeacher()); 10 Teacher mathTeacher2 = (Teacher) dynamic2.getProxyInstance(); 11 mathTeacher2.teach(); 12 13 14 15 class Dynamic implements InvocationHandler 16 private Object target; 17 18 public Dynamic(Object target) 19 this.target = target; 20 21 22 public void before() 23 System.out.println("准备资料。。。"); 24 25 26 public void after() 27 System.out.println("布置作业。。。"); 28 29 30 @Override 31 public Object invoke(Object proxy, Method method, Object[] args) throws Throwable 32 before(); 33 Object result = method.invoke(target, args); 34 after(); 35 return result; 36 37 38 public Object getProxyInstance() 39 return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this); 40 41 42 43 interface Teacher 44 void teach(); 45 46 47 class MathTeacher implements Teacher 48 @Override 49 public void teach() 50 System.out.println("上数学课"); 51 52 53 54 class EnglishTeacher implements Teacher 55 @Override 56 public void teach() 57 System.out.println("上英语课"); 58 59
以上是关于SpringCloud(一SpringCloud 基础)的主要内容,如果未能解决你的问题,请参考以下文章
springcloud教程,springcloud指南,springcloud中文手册,springcloud项目实战,springcloud源码分享