<h2><span style="color:#0070c0;"><strong>代理模式的基本介绍 </strong></span></h2>
<div>
<span style="color:#000000;">1) </span>
<span style="color:#000000;">代理模式:为一个对象</span>
<span style="color:#cc0000;"><strong>提供一个替身</strong></span>
<span style="color:#000000;">,以控制对这个对象的访问。即通过代理 </span>
</div>
<div>
<span style="color:#000000;">对象访问目标对象</span>
<span style="color:#000000;">.</span>
<span style="color:#000000;">这样做的</span>
<span style="color:#da0000;"><strong>好处是</strong></span>
<span style="color:#000000;">:</span>
<span style="color:#000000;">可以在目标对象实现的基础上</span>
<span style="color:#000000;">,</span>
<span style="color:#000000;">增强额外的 </span>
</div>
<div>
<span style="color:#000000;">功能操作</span>
<span style="color:#000000;">,</span>
<span style="color:#000000;">即扩展目标对象的功能。 </span>
</div>
<div>
<span style="color:#000000;">2) </span>
<span style="color:#000000;">被代理的对象可以是</span>
<span style="color:#000000;"><strong>远程对象</strong></span>
<span style="color:#000000;">、</span>
<span style="color:#cc0000;"><strong>创建开销大的对</strong></span>
<span style="color:#000000;">象或</span>
<span style="color:#cc0000;"><strong>需要安全控制的对象 </strong></span>
</div>
<div>
<span style="color:#000000;">3) </span>
<span style="color:#000000;">代理模式有不同的形式</span>
<span style="color:#000000;">, </span>
<span style="color:#000000;">主要有三种 </span>
<span style="color:#000000;"><strong>静态代理</strong></span>
<span style="color:#000000;">、</span>
<span style="color:#000000;"><strong>动态代理 </strong></span>
<span style="color:#000000;"><strong>(JDK</strong></span>
<span style="color:#000000;"><strong>代理、接口代 </strong></span>
</div>
<div>
<span style="color:#000000;"><strong>理</strong></span>
<span style="color:#000000;"><strong>)</strong></span>
<span style="color:#000000;">和 </span>
<span style="color:#000000;"><strong>Cglib</strong></span>
<span style="color:#000000;"><strong>代理 </strong></span>
<span style="color:#000000;"><strong>(</strong></span>
<span style="color:#000000;"><strong>可以在内存动态的创建对象,而不需要实现接口, 他是属于 </strong></span>
</div>
<div>
<span style="color:#000000;"><strong>动态代理的范畴</strong></span>
<span style="color:#000000;"><strong>) </strong></span>
<span style="color:#000000;">。 </span>
</div>
<div>
<h2><span style="color:#0070c0;"><strong>静态代码模式的基本介绍</strong></span></h2>
<div>
<span style="color:#000000;">静态代理在使用时</span>
<span style="color:#000000;">,</span>
<span style="color:#000000;">需要定义接口或者父类</span>
<span style="color:#000000;">,</span>
<span style="color:#000000;">被代理对象</span>
<span style="color:#000000;">(</span>
<span style="color:#000000;">即目标对象</span>
<span style="color:#000000;">)</span>
<span style="color:#000000;">与代理对象一 </span>
</div>
<div>
<span style="color:#000000;">起实现相同的接口或者是继承相同父类 </span>
</div>
<div>
<h3><span style="color:#000000;">具体要求 </span></h3>
<div>
<span style="color:#000000;">1) </span>
<span style="color:#000000;">定义一个接口</span>
<span style="color:#000000;">:ITeacherDao </span>
</div>
<div>
<span style="color:#000000;">2) </span>
<span style="color:#000000;">目标对象</span>
<span style="color:#000000;">TeacherDAO</span>
<span style="color:#000000;">实现接口</span>
<span style="color:#000000;">ITeacherDAO </span>
</div>
<div>
<span style="color:#000000;">3) </span>
<span style="color:#000000;">使用静态代理方式</span>
<span style="color:#000000;">,</span>
<span style="color:#000000;">就需要在代理对象</span>
<span style="color:#000000;">TeacherDAOProxy</span>
<span style="color:#000000;">中也实现</span>
<span style="color:#000000;">ITeacherDAO </span>
</div>
<div>
<span style="color:#000000;">4) </span>
<span style="color:#000000;">调用的时候通过调用代理对象的方法来调用目标对象</span>
<span style="color:#000000;">. </span>
</div>
<div>
<span style="color:#ea0000;"><strong>5) </strong></span>
<span style="color:#ea0000;"><strong>特别提醒</strong></span>
<span style="color:#000000;">:代理对象与目标对象要实现相同的接口</span>
<span style="color:#000000;">,</span>
<span style="color:#000000;">然后通过调用相同的方法来 </span>
</div>
<div>
<span style="color:#000000;">调用目标对象的方法。</span>
</div>
<div>
</div>
<h3><span style="color:#000000;">代码实现</span></h3>
<p>接口</p>
<pre class="blockcode">//接口
public interface ITeacherDao {
void teach(); // 授课的方法
}
</pre>
<p>目标对象</p>
<pre class="blockcode">public class TeacherDao implements ITeacherDao {
@Override
public void teach() {
// TODO Auto-generated method stub
System.out.println(" 老师授课中 。。。。。");
}
}
</pre>
<p>代理对象</p>
<pre class="blockcode">//代理对象, |
|