代理模式替原对象进行一些操作,比如我们在租房子的时候回去找中介,打官司我们需要请律师,因为律师在法律方面有专长,做饭需要找厨师!
还拿厨师和理发师的例子吧!
一个理发师不会做饭,一个厨子会做饭,他们都实现一个叫做Person的接口,一个理发师想做饭的话,必须请一个厨子帮忙!
二话不说上代码!
- public interface Person {
- public void cook();
- }
有做饭能力的厨子类
- public class Cook implements Person {
- @Override
- public void cook() {
- System.out.println("做饭去了");
- }
- }
本来不会做饭的理发师类,但是可以通过请一个厨师来做饭
测试代码
- public class ProxyTest {
- public static void main(String[] args){
- Person person = new Barber();
- person .cook();
- }
- }
就这样啊!
总结:刚写完代理模式和装饰模式,也用了理发师和厨师的例子!看来很像,有什么差别呢!
装饰模式:
装饰模式是为了给理发师装上一个做饭的功能,在建造好理发师的的对象是,并没有做饭的真正功能
他需要一个会做饭的对象,赋值个给他内部的接口引用,理发师才能有的功能
- public Barber(Person mPerson){
- super();
- this.mPerson = mPerson;
- }
- public static void main(String[] args){
- Person person = new Cook();
- Person obj = new Barber(person);
- obj.cook();
- }
而代理模式:
理发师在建造的时候已经跟一个厨师绑定在一起了!当理发师生成完成,他的做饭功能也就生成了!
一位他的构造函数里定义了一个厨师的对象
- private Cook mCook ;
-
- public Barber(){
- super();
- this.mCook = new Cook();
- }
- public static void main(String[] args){
- Person person = new Barber();
- person .cook();
- }