精华内容
下载资源
问答
  • 设计模式分为三大类:`创建型模式:对对象的实例化过程进行抽象,这使得一个系统可以不用关心这些对象是如何创建,组合,呈现的,对于类创建模式来说通过使用继承改变实例化的类,对于对象创建模式来说通过使用代理...

    一、三大类别

    设计模式分为三大类:
    `创建型模式:对对象的实例化过程进行抽象,这使得一个系统可以不用关心这些对象是如何创建,组合,呈现的,对于类创建模式来说通过使用继承改变实例化的类,对于对象创建模式来说通过使用代理来实例化所需要的对象。共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
    `结构型模式:通过对多个类和对象进行组合得到复杂结构的类,一般使用继承或者成员变量引用形式来实现。共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
    `行为型模式:行为模式不仅表达了对象和类,还表达了他们之间的交互,涉及到了对象和算法的分配。共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
    其实还有两类:并发型模式和线程池模式。
    二、六大原则
    总原则-开闭原则
    对扩展开放,对修改封闭。在程序需要进行拓展的时候,不能去修改原有的代码,而是要扩展原有代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。

    1、单一职责原则
    不要存在多于一个导致类变更的原因,也就是说每个类应该实现单一的职责,否则就应该把类拆分。

    2、里氏替换原则(Liskov Substitution Principle)
    任何基类可以出现的地方,子类一定可以出现。里氏替换原则是继承复用的基石,只有当衍生类可以替换基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。
    里氏代换原则是对“开-闭”原则的补充。实现“开闭”原则的关键步骤就是抽象化。而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。里氏替换原则中,子类对父类的方法尽量不要重写和重载。因为父类代表了定义好的结构,通过这个规范的接口与外界交互,子类不应该随便破坏它。

    即可以使用基类的地方都可以使用子类替代。
    3、依赖倒转原则(Dependence Inversion Principle)
    面向接口编程,依赖于抽象而不依赖于具体。写代码时用到具体类时,不与具体类交互,而与具体类的上层接口交互。

    4、接口隔离原则(Interface Segregation Principle)
    每个接口中不存在子类用不到却必须实现的方法,如果不然,就要将接口拆分。使用多个隔离的接口,比使用单个接口(多个接口方法集合到一个的接口)要好。

    5、迪米特法则(最少知道原则)(Demeter Principle)
    一个类对自己依赖的类知道的越少越好。无论被依赖的类多么复杂,都应该将逻辑封装在方法的内部,通过public方法提供给外部。这样当被依赖的类变化时,才能最小的影响该类。
    最少知道原则的另一个表达方式是:只与直接的朋友通信。类之间只要有耦合关系,就叫朋友关系。耦合分为依赖、关联、聚合、组合等。我们称出现为成员变量、方法参数、方法返回值中的类为直接朋友。局部变量、临时变量则不是直接的朋友。我们要求陌生的类不要作为局部变量出现在类中。

    6、合成复用原则(Composite Reuse Principle)
    尽量首先使用合成/聚合的方式,而不是使用继承。即首先考虑作为成员变量来调用另一个类的方法。
    ---------------------
    作者:水-滴
    来源:CSDN
    原文:https://blog.csdn.net/u014231646/article/details/80107515
    版权声明:本文为博主原创文章,转载请附上博文链接!

    展开全文
  • 常见的23中设计模式可以分为一下三类: 创建型模式:单例模式、抽象工厂模式、工厂模式、原型模式、建造者模式。 结构型模式:适配器模式、桥接模式、装饰者模式、组合模式、外观模式、享元模式、代理模式。 行为型...

    常见的23中设计模式可以分为以下三类:

    1. 创建型模式:单例模式、抽象工厂模式、工厂模式、原型模式、建造者模式。
    2. 结构型模式:适配器模式、桥接模式、装饰者模式、组合模式、外观模式、享元模式、代理模式。
    3. 行为型模式:模板方法模式、命令模式、访问者模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、责任链模式。
    展开全文
  • java实现代理

    2019-01-15 14:46:50
    设计模式—代理模式java实现 概念解释:  代理是一种设计模式,... 代理模式的实现分为大类:静态实现和动态实现,动态实现根据实现的方式分为:jdk 动态实现,cglib动态实现   静态实现:  组成部分:  ...

    设计模式—代理模式java实现

    • 概念解释:

           代理是一种设计模式,提供了对目标对象另外的访问方式,即通过代理对象访问目标对象。可以不修改目标对象,对目标对象功能进行拓展

    • 代理模式的实现:

           代理模式的实现分为两大类:静态实现和动态实现,动态实现根据实现的方式分为:jdk 动态实现,cglib动态实现

     

    • 静态实现:
    •        组成部分:

                  代理目标接口:定义代理类和目标实现类的基本模板,代理类和目标实现类都要实现这个接口

                  目标对象: 实现代理目标接口的实现类

                  代理类: 持有目标对象,根据不同的策略选择不同的方法调用目标对象的方法。

    静态代理的优缺点:

           优点: 做到不修改目标对象的功能前提下,对目标功能扩展

           缺点: 因为代理对象需要与目标对象实现同样的接口,所以会有很多代理类,目标类,同时修改接口,目标类和代理类都要维护。

    实现:

           代理目标接口:           

       public interface Person {
    
                      void say();
    
    }
    
    

    实现类:            

      public class LiudeHua implements Person {
    
                 public void say() {
    
                System.out.println("hello,I`m 刘德华");
    
                 }
    
    }

     

    实现类2:

           public class ZhangSan implements Person {
    
        public void say() {
    
            System.out.println("hello,I`m zhangSan");
    
        }
    
    }
    
    

                  工具类:虽然不是必须的,但是为了体现拓展性,所以还是要:                  

       public class MonitorUtil {
    
                      private static ThreadLocal<Long> threadLocal = new ThreadLocal<Long>();
    
                      public static  void  start(){
    
            System.out.println("开始调用" +System.currentTimeMillis());
    
            threadLocal.set(System.currentTimeMillis());
    
        }
     public static void finish(String methodName){
    
            System.out.println("调用结束" +System.currentTimeMillis());
    
            System.out.println(methodName + "方法耗时" + (System.currentTimeMillis() - threadLocal.get()) + "ms");
    
        }
    
    }


        

     

           代理类:       

           public class PersonProxy implements Person {
    
        Person  liuDeHua  = new LiudeHua();
    
        Person  zhangSan = new ZhangSan();
    
        public void say() {
    
        }
    
    

       

    public void say(String name){
    
            MonitorUtil.start();
    
            if("zhangsan".equals(name)){
    
                zhangSan.say();
    
            }else if("liudehua".equals(name)){
    
                liuDeHua.say();
    
            }
    
            MonitorUtil.finish(name);
    
    }

     

    方法调用:      

    public static void main(String args[]){
    
            PersonProxy proxy = new PersonProxy();
    
            proxy.say("zhangsan");
    
            proxy.say("liudehua");
    
        }

     

     

    结果:

          

     

     

    Jdk动态代理:

           组成部分:

    1. 目标类接口
    2. 目标实现类
    3. Java.lang.reflect.Proxy类的Object newProxyInstance(ClassLoader loader,               Class<?>[] interfaces,                                        InvocationHandler h)
    4. InvocationHandler接口的实现类:实现调用目标类的扩展逻辑

    JDK动态代理的优缺点:

                  优点:动态实现了不改变目标对象逻辑的扩展

                  缺点:目标必须实现接口,不然无法实现动态代理

    Java代码实现:

           目标接口:          

        public interface Person {
    
        void say(String word);
    
    }
    
    

           实现类:

                  实现类1:                    

     public class Student implements Person {
    
        public void say(String word) {
    
            System.out.println("我是学生"+word);
    
            System.out.println("我是学生"+word);
    
            System.out.println("我是学生"+word);
    
        }
    
    }

           实现类2:             

    public class Teacher implements Person {
    
        public void say(String word) {
    
            System.out.println(word);
    
            System.out.println(word);
    
            System.out.println(word);
    
        }
    
    }

     

    InvocationHandler接口实现      

     public class ProxyInvocationHandler implements InvocationHandler {
    
        private Object target;
    
        public ProxyInvocationHandler(Object target){
    
            this.target = target;
    
        }
    
        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
    
            MonitorUtil.start();
    
            Object resultValue = method.invoke(target,args);
    
            MonitorUtil.finish(target.getClass().getName());
    
            return resultValue;
    
    }
    
    

                  Main类调用:

                        

    public class Main {
    
        public  static void main(String args []){
    
            Person statudent = new Student();
    
            Person tearcher = new Teacher();
    
            InvocationHandler statudentInvocation = new ProxyInvocationHandler(statudent);
    
            InvocationHandler tearcherInvocation = new ProxyInvocationHandler(tearcher);
    
            Person studentProxy = (Person) Proxy.newProxyInstance(statudent.getClass().getClassLoader(),statudent.getClass().getInterfaces(),statudentInvocation);
    
            Person TearcherProxy = (Person) Proxy.newProxyInstance(tearcher.getClass().getClassLoader(),tearcher.getClass().getInterfaces(),tearcherInvocation);
    
            studentProxy.say("我要好好学习");
    
            TearcherProxy.say("我要带好学生");
    
        }
    
    }
    
    

     

    实现结果:

                 

     

     

     

    Cglib实现代理

                  组成部分:

                         实现类:实现具体目标的逻辑

                         代理类:实现MethodInterceptor接口,扩展逻辑实现

                         Enhancer  设置代理类,并且生成代理对象,

                优点:

                         实现了不适用接口就可以实现动态代理

                  缺点:  实现类没有统一的限定格式

           Java代码实现:

                  目标类:       

           public class Student {
    
        public void say(){
    
            System.out.println("哈喽");
    
        }
    
    }

     

    代理类:          

        public class ProxyFactory implements MethodInterceptor {
    
        private Object target;
    
    
    
        public ProxyFactory(Object target) {
    
            this.target = target;
    
        }
    
     public Object getInstance(){
    
            Enhancer en = new Enhancer();
    
            en.setSuperclass(target.getClass());
    
            en.setCallback(this);
    
            return en.create();
    
        }
    
    
    
        public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
    
            MonitorUtil.start();
    
            Object object = method.invoke(target,objects);
    
            MonitorUtil.finish("intercept");
    
            return object;
    
        }
    
    }

       

     

     

     

    启动类:public class Main {   

    public static void main(String args []) {
    
            Student target = new Student();
    
            Student proxy = (Student) new ProxyFactory(target).getInstance();
    
            proxy.say();
    
        }
    
    }
    
    

    结果:

          

          

     

     

     

    三种方法类的思维导图:

          

    展开全文
  • 高速,双地址,高效率代理验证和分类,可把代理分为超级,匿名,透明级 允许自定义验证地址 支持HTTP,SOCKS4,SOCKS5, Tunnel, SSL类型,可显示代理速度,可按速度排序 验证完毕后生成详细"验证报告", 包括代理速度...
  • 通常来说,根据缓存内容的不同可以将Cache设备分为Web Cache和流媒体Cache两大类。Web Cache设备主要用于缓存普通网页的内容和对象,同时大多数设备也具备文件下载、流媒体服务等能力;流媒体Cache设备主要是针对...

    以下内容根据雷葆华所著《CDN技术详解》整理得到。

    Web Cache

           通常来说,根据缓存内容的不同可以将Cache设备分为Web Cache流媒体Cache两大类。Web Cache设备主要用于缓存普通网页的内容和对象,同时大多数设备也具备文件下载、流媒体服务等能力;流媒体Cache设备主要是针对视频流媒体服务进行加速,功能相对单一。
    设备厂商通常不会进行明确区分,但是CDN服务提供商会采用不同的技术路线和实现方式进行优化。
           Web Cache作为一种网页缓存技术,可以在用户访问网站服务器的任何一个中间网元上实现。根据HTTP协议的定义,在一次网页访问中,用户从客户端发出请求到网站服务器响应请求内容的交互过程中,通常会涉及4个关键的网元:用户、代理、网关和Web服务器

    1. 用户端可以通过在浏览器中缓存访问过的网页,再次访问时可以直接访问网页副本;
    2. 根据不同的应用场景和用户需求,Web Cache通常作为代理或网关部署在用户的访问路径上.部署的位置不同、工作模式不同,对Web Cache有不同的要求。

           当Web Cache作为代理使用时,通常工作在正向代理或者透明代理的模式,Web Cache可以在这两种模式下实现访问内容副本的缓存和服务;Web Cache应用最多的地方还是在网关上,网关通常工作在反向代理模式。

    三种代理

    正向代理和透明代理中,用户主机和代理服务器在同一网络环境中,反向代理中,代理服务器和应用服务器在同一网络环境中。

    正向代理

    正向代理(Forward Proxy)方式下,使用者需要配置其网络访问的代理服务器地址为Cache设备的地址,内网用户对互联网的所有访问都通过代理服务器代理完成。此时也可以在其上加一些过滤规则,针对某些应用和某类访问设置代理。
    正向代理工作示意图
           配置完成后,用户在上网时其主机对外网服务器的数据传输首先要传输给正向代理服务器,代理服务器检查代理缓存中是否保存了用户请求数据,如果有则直接返回给用户;如果没有缓存请求内容,则正向代理服务器负责发送用户主机请求数据到外网目标服务器,接收并缓存外网服务器响应数据,同时将响应数据反馈给用户主机。(在执行正向代理功能时也可以完成安全认证和访问控制功能,比如可以设置某些特定用户在工作时间访问外网站点,或者禁止访问某些外部站点等。)
           正向代理多用于中小企业网络环境,Cache设备作为企业网的出口网关提供代理服务、内容缓存、Internet访问控制、安全认证等功能。在正向代理模式下,Cache设备可以为企业网节省出口带宽,提高企业内部网络的安全性,防止员工滥用网络资源并在一定程度上防御病毒感染。
           代理服务器一定程度上也缓解了源节点访问的压力,有点分级缓存的概念。

    反向代理

    反向代理(Backward Proxy)方式中,用户不需要配置代理服务器地址,Cache设备的地址作为被访问域的服务地址写入DNS记录,并利用Cache设备的内容路由/交换能力完成代理访问。反向代理和其他代理方式的区别是,反向代理专门对定制的内容进行加速,如域名streamabc.com之中的所有网页内容或域名streamcde.com之中的所有流媒体内容。
    反向代理工作示意图
           用户直接访问代理服务器获取应用服务器提供的服务,而不需要配置任何代理服务。大致流程为,用户首先发送数据请求到外网的反向代理服务器,代理服务器检查代理缓存中是否保存了用户请求的数据,如果有则直接返回给用户,如果没有缓存请求的内容,则反向代理服务器将用户主机请求数据发送给应用服务器,同时接收应用服务器响应数据并反馈给用户主机,同时缓存用户请求相关内容。在执行反向代理功能时,代理服务器响应了大部分应用访问请求,大大减轻了应用服务器的负载压力。
           在反向代理方式下,当Cache数量较多,网络规模较大时,需要部署**GSLB(Global Server LoadBalancing)**来对全网中的Cache进行负载均衡,并对全网的内容分发策略进行设定,就形成了CDN网络的雏形。反向代理多用于大型ISP/ICP和运营商环境,对于运营商和ISP,反向代理可以实施透明的内容缓存,增加用户访问内容的速度和提高客户满意度。

    透明代理

    透明代理(Transparent Proxy)方式下,用户的浏览器不需要配置代理服务器地址,但是用户的路由设备需要支持WCCP协议(Web Cache Control Protocol)。路由器配置了WCCP功能后,会把指定的用户流量转发给Cache,由Cache对用户提供服务。或者采用四层交换机实现,都可以支持负载均衡,可以对多台cache平均分配流量,从而扩展网络规模,支持大量用户访问。
    透明代理可以看做是通过网络设备或协议实现的正向代理工作模式,因而具备很多与正向代理相同的特点,多用于企业网环境和运营商环境。

    Web Cache实现

           首先,Web Cache的技术本质是缓存,在面向用户一侧时扮演服务器的角色,在面向网站的源服务器时扮演客户端的角色。因为Web Cache的介入,原始的客户端直接访问源服务器的访问过程就变成了从客户端到Web Cache,再从Web Cache到源服务器的两个访问过程,所以原有的点到点的单次HTTP协议过程也变成了多次HTTP协议过程,因此Web Cache应具备HTTP协议所描述的基本功能。
           其次,在实现最基本的HTTP协议能力和缓存工作方式的基础上,要根据应用场景和工作模式确定Web Cache应具备的功能,并明确应达到的性能指标。

    展开全文
  • 可以代理分为socks代理、超级匿名代理、一般匿名代理、透明代理、网关代理。它具有强大的论坛吸收功能、搜索引擎吸收功能、代理扫描功能。并对代理的查询国家、代理重复、智能删除代理水印、代理无序等功能进行...
  • 而在AOP实现的底层主要用到了动态代理,而动态代理分为JDK动态代理和CGLIB动态代理,两者的区别是JDK动态代理的实现中业务必须必须定义接口,而CGLIB没有这个约束,可以说CGLIB更强大; JDK动态代理实现示例: 1...
  • 设计模式分为三大类: 创建型模式:对对象的实例化过程进行抽象,这使得一个系统可以不用关心这些对象是如何创建,组合,呈现的,对于类创建模式来说通过使用继承改变实例化的类,对于对象创建模式来说通过使用代理...
  • 设计模式共有二十三种,大致可以分为以下三大类: ①创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 ②结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接...
  • 设计模式的三大模式

    2020-10-29 21:35:23
    设计模式可以分为创建型、结构型和行为型模式。 创建型模式对的实例化过程进行了抽象,能够使软件做到与对象的创建与组织无关。常见的创建型模式有:工厂方法、抽象工厂、单例、构建、原型模式。 结构型模式描述...
  • 代理模式前言代理模式的特点一个...GOF( Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides)联合出版的书中提到的设计模式一共有23种,可以分为三大类:创建型模式(Creational Patterns)、结构型模式
  • 按照安全的要求,Http代理IP分为三大类:透明代理,普通匿名代理,高匿代理。所以,哪个IP代理效果最好,我们就从原理上具体分析一下。 高隐藏代理:不修改报文,让服务器端看起来好像有一个真正的客户浏览器在访问...
  • 代理解决的问题当两个需要通信时,引入第代理类,将两个的关系解耦,让我们只了解代理类即可,而且代理的出现还可以让我们完成与另一个之间的关系的统一管理,但是切记,代理类和委托要实现相同的
  • 简述 代理模式是一种结构型设计模式,代理模式主要包含种角色:抽象对象角色、目标对象角色、代理对象角色,代理模式主要通过抽象对象角色...代理模式主要分为大类:静态代理模式和动态代理模式,其中动态代理...
  • 文章目录一、概念二、静态代理、JDK动态代理 一、概念   代理,顾名思义,代你处理的意思。...动态代理可以在程序运行期间根据需要动态的创建代理及其实例,来完成具体的功能。 二、静态代理 、...
  • 一、前言 1、代理模式概念 为一个对象提供一个替身,以控制对这个对象的访问,即通过...java中的代理模式分为三种:静态代理、动态代理(JDK代理、接口代理)、Cglib代理。 其中Cglib代理有些书上也把它归为了动态...
  • Squid:是一个高性能的代理缓存服务器,可以加快内部浏览互联网速度(正/反向)、IP伪装“××...firefox插件:firebug curl -I http://域名:可以体现出每个网站详细信息 分为三大分类:正向代理(客户端程序需指...
  • 我们现在常用的网络爬虫,从按尺寸划分可以分为三大类。 • 第一类是指以爬取网页或者玩转网页为主的一类爬虫,这类爬虫规模很小,获取网络的数据量也很小,它对爬取网页的速度并不敏感。针对这类的网络爬虫,我们就...
  • 代理设计模式属于种的的:结构型模式(用于描述如何将或对象按某种布局组成更的结构)。 1.代理模式的定义 为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一...
  • 23种设计模式,分三大类,创建型、结构型、行为型。 创建型总共有 5 个,分两次记,第一次关注工厂,第二次关注单例、原型和建造者。 结构型总共有7个,分三次记,第一次关注类之间的结构,第二次关注类之间的关系...
  • 目录 一、适配器模式 二、桥接模式 、过滤器模式 ...可以分为结构型模式。它关心的组合,由多个可以组合成一个更的系统,在结构型模式中一般只存在继承关系和实现关系 ...
  • 首先根据资料进行小的整理  我们所说的设计模式有23种,可以分为以下三大类:   创建型模式(5种):工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模式。  ...
  • 根据《Java设计模式》一书分类,设计模式一般分为3类型,共23小类类。一、创建型模式: 单例模式 抽象工厂模式 建造者模式 工厂模式 原型模式 二、结构型模式: 适配器模式 桥接模式 装饰模式 组合模式 ...
  • 工厂模式实现了创建者和调用者分离,工厂模式分为简单工厂、工厂方法、抽象工厂种模式。 2.工厂模式的好处 利用工厂模式可以降低程序的耦合性,为后期的维护修改提供了很的便利。将选择实现、创建对象统一...
  • 设计模式总共有 23 种,总体来说可以分为三大类:创建型模式( Creational Patterns )、结构型模式( Structural Patterns ) ,行为型模式( Behavioral Patterns )。 创建型模式:工厂模式、抽象工厂模式、单例...

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 179
精华内容 71
关键字:

代理可以分为三大类