zoukankan      html  css  js  c++  java
  • 设计模式

    总结

    1.装饰器模式关注于在一个对象上动态的添加方法,然而代理模式关注于控制对对象的访问

    2.换句话 说,用代理模式,代理类(proxy class)可以对它的客户隐藏一个对象的具体信息。因此,当使用代理模式的时候,我们常常在一个代理类中创建一个对象的实例。并且,当我们使用装饰器模 式的时候,我们通常的做法是将原始对象作为一个参数传给装饰者的构造器。

    3.我们可以用另外一句话来总结这些差别:使用代理模式,代理和真实对象之间的的关系通常在编译时就已经确定了,而装饰者能够在运行时递归地被构造。 

    所以考虑这两种设计模式的时候,要分清楚你自己的开发者角色:

    • 如果是别人A已经给你一个类,你需要做好增强给第三方C使用增强的类,且C不可以直接使用未增强的类对象,那么你这个开发者应该使用代理模式,把你可以获得的类对象封装到自己的代理类;
    • 如果你希望把何时增强功能的这个决策权交给C,即C既可以使用增强的类对象,也可以使用不增强的对象,决定权在于C,那么这个时候你应该使用装饰器模式。

    代理模式 代码

    //代理模式
    public class Proxy implements Subject{
    
           private Subject subject;
           public Proxy(){
                 //关系在编译时确定:把真实对象RealSubject封装在内部,不暴露出去
                subject = new RealSubject();
           }
           public void doAction(){
                 ….
                 subject.doAction();
                 ….
           }
    }
    //代理的客户
    public class Client{
            public static void main(String[] args){
                 //客户不知道代理委托了另一个对象
                 Subject subject = new Proxy();
                 …
            }
    }

    装饰模式 代码

    //装饰器模式
    public class Decorator implements Component{
            private Component component;
            //将原始对象作为一个参数传给装饰者的构造器
            public Decorator(Component component){
                this.component = component
            }
           public void operation(){
                ….
                component.operation();
                ….
           }
    }
    //装饰器的客户
    public class Client{
            public static void main(String[] args){
                //客户指定了装饰者需要装饰的是哪一个类
                Component component = new Decorator(new ConcreteComponent());
                …
            }
    }
  • 相关阅读:
    rem是如何实现自适应中的?
    meta基础知识
    JqueryMobile动态生成listView并实现刷新的两种方法
    javascript中for/in循环及使用技巧
    JavaScript中this详解
    使用css实现全兼容tooltip提示框
    如何使用CSS3画出一个叮当猫
    jQuery实现的Div窗口震动效果实例
    jQuery实现动态添加和删除一个div
    js对文章内容进行分页示例代码
  • 原文地址:https://www.cnblogs.com/frankcui/p/15314304.html
Copyright © 2011-2022 走看看