学了代理模式之后发现静态代理模式和装饰模式非常的相似,代理类和被代理的客户实现同一个接口,装饰者和被装饰者也是实现的同一个接口,实现方式也类似(针对接口编程是一个主要设计原则)。搜索之,得到结论:代理模式主要是控制对某个特定对象访问,而装饰模式主要是为了给对象添加行为。
所以两类的设计模式的代码还是有一些差别。下面代码来着网上,做了一些修改,原网址http://www.cnblogs.com/jaredlam/archive/2011/11/08/2241089.html
静态代理模式
通常自己构造对象,方法中控制对象的访问。
-
//接口
-
interface Subject{
-
public void doAction();
-
}
-
//实现类
-
class RealSubject implements Subject{
-
@Override
-
public void doAction() {
-
System.out.println(
“do something”);
-
}
-
-
}
-
//代理类
-
class Proxy implements Subject{
-
private Subject subject;
-
public Proxy(){
-
//关系在编译时确定
-
subject =
new RealSubject();
-
}
-
public void doAction(){
-
//控制访问
-
if()
-
subject.doAction();
-
else
-
…
-
}
-
}
装饰模式
在构造函数中传入被装饰的对象。
-
interface Component{
-
public void operate();
-
}
-
//具体构件
-
class ConcreteComponent implements Component{
-
public void operate(){
-
System.out.print(
"do somthing");
-
}
-
}
-
//装饰者
-
class Decorator implements Component{
-
private Component component;
-
public Decorator(Component component){
-
//通过构造器传值
-
this.component = component
-
}
-
public void operation(){
-
do something
-
component.operation();
-
do Something
-
-
}
-
}
学了代理模式之后发现静态代理模式和装饰模式非常的相似,代理类和被代理的客户实现同一个接口,装饰者和被装饰者也是实现的同一个接口,实现方式也类似(针对接口编程是一个主要设计原则)。搜索之,得到结论:代理模式主要是控制对某个特定对象访问,而装饰模式主要是为了给对象添加行为。
所以两类的设计模式的代码还是有一些差别。下面代码来着网上,做了一些修改,原网址http://www.cnblogs.com/jaredlam/archive/2011/11/08/2241089.html
静态代理模式
通常自己构造对象,方法中控制对象的访问。
-
//接口
-
interface Subject{
-
public void doAction();
-
}
-
//实现类
-
class RealSubject implements Subject{
-
@Override
-
public void doAction() {
-
System.out.println(
“do something”);
-
}
-
-
}
-
//代理类
-
class Proxy implements Subject{
-
private Subject subject;
-
public Proxy(){
-
//关系在编译时确定
-
subject =
new RealSubject();
-
}
-
public void doAction(){
-
//控制访问
-
if()
-
subject.doAction();
-
else
-
…
-
}
-
}
装饰模式
在构造函数中传入被装饰的对象。
-
interface Component{
-
public void operate();
-
}
-
//具体构件
-
class ConcreteComponent implements Component{
-
public void operate(){
-
System.out.print(
"do somthing");
-
}
-
}
-
//装饰者
-
class Decorator implements Component{
-
private Component component;
-
public Decorator(Component component){
-
//通过构造器传值
-
this.component = component
-
}
-
public void operation(){
-
do something
-
component.operation();
-
do Something
-
-
}
-
}