模式动机:
public
interface
IGiveGift
{
void
GiveDolls();
void
GiveFlowers();
void
GiveChocolate();
}
//此类中的@Data用到了lombok的注解,可以自动提供get set方法,节省代码量
//请参考“eclipse使用lombok”博客。
import lombok.Data;
public
@Data
class
SchoolGirl
{
String name;
}
public
class
Pursuit
implements
IGiveGift
{
SchoolGirl mm;
public
Pursuit(SchoolGirl mm)
{
super();
this.mm = mm;
}
public
Pursuit()
{
super();
}
@Override
public
void
GiveDolls()
{
// TODO Auto-generated method stub
System.out.println(mm.getName()+"送你洋娃娃。");
}
@Override
public
void
GiveFlowers()
{
// TODO Auto-generated method stub
System.out.println(mm.getName()+"送你鲜花。");
}
@Override
public
void
GiveChocolate()
{
// TODO Auto-generated method stub
System.out.println(mm.getName()+"送你巧克力。");
}
}
public
class
Proxy
implements
IGiveGift
{
Pursuit gg;
public
Proxy()
{
super();
}
public
Proxy(SchoolGirl mm)
{
super();
this.gg =
new
Pursuit(mm);
}
@Override
public
void
GiveDolls()
{
// TODO Auto-generated method stub
gg.GiveDolls();
}
@Override
public
void
GiveFlowers()
{
// TODO Auto-generated method stub
gg.GiveFlowers();
}
@Override
public
void
GiveChocolate()
{
// TODO Auto-generated method stub
gg.GiveChocolate();
}
}
public
class
Test
{
public
static
void main(String[] args)
{
SchoolGirl mm =
new
SchoolGirl();
mm.setName("小美");
Proxy daili =
new
Proxy(mm);
daili.GiveDolls();
daili.GiveFlowers();
daili.GiveChocolate();
}
}
public
interface
Subject{
public
void request();
}
public
RealSubject implement Subject{
public
void request(){
//真实请求
}
}
public
class
Proxy implement Subject{
RealSubject realSubject;
public
Proxy(){
realSubject =
new
RealSubject();
}
public
void request(){
realSubject.request();
}
}
public
static
void main(String[] args)
{
Proxy proxy =
new
Proxy();
proxy.request();
}
代理模式的优点
代理模式的缺点
根据代理模式的使用目的,常见的代理模式有以下几种类型:
注:若手机上部分代码显示不清楚,可以选择点击左下角“阅读原文”。
往期回顾
设计模式(一) | 啥是工厂模式和策略模式?
设计模式(二) | 装饰模式---穿什么有这么重要?