• 5个常用的设计模式


    1.单例模式

    单例好文:https://www.cnblogs.com/crazy-wang-android/p/9054771.html

    由结果可以得知单例模式为一个面向对象的应用程序提供了对象惟一的访问点,不管它实现何种功能,整个应用程序都会同享一个实例对象。

    2.代理模式

    首先了解一下静态代理:http://www.imooc.com/article/details/id/47695

    接下来是动态代理:https://blog.51cto.com/13586365/2065317

    3.装饰器模式

    装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。

    用奶茶的例子来进行解释https://www.jianshu.com/p/427342d3b5c0

    装饰器模式和道理模式的区别

    代理模式,注重对对象某一功能的流程把控和辅助。它可以控制对象做某些事,重心是为了借用对象的功能完成某一流程,而非对象功能如何。
    装饰模式,注重对对象功能的扩展,它不关心外界如何调用,只注重对对象功能的加强,装饰后还是对象本身。

    用实际的例子来看如果是中介租房的例子就是代理模式,如果是奶茶添加单独材料等就是装饰者模式

    4.适配器模式

    类适配器的重点在于类,是通过构造一个继承Adaptee类来实现适配器的功能; 
    对象适配器的重点在于对象,是通过在直接包含Adaptee类来实现的,当需要调用特殊功能的时候直接使用Adapter中包含的那个Adaptee对象来调用特殊功能的方法即可。

    三种适配器

    类适配器(通过继承想要的功能类和实现原本的接口类)

    // 已存在的、具有特殊功能、但不符合我们既有的标准接口的类
    class Adaptee {
        public void specificRequest() {
            System.out.println("被适配类 具有特殊功能...");
        }
    }
    
    // 目标接口,或称为标准接口
    interface Target {
        public void request();
    }
    
    // 具体目标类,只提供普通功能
    class ConcreteTarget implements Target {
        public void request() {
            System.out.println("普通类 具有普通功能...");
        }
    }
    
    // 适配器类,继承了被适配类,同时实现标准接口
    class Adapter extends Adaptee implements Target{
        public void request() {
            super.specificRequest();
        }
    }
    
    // 测试类
    public class Client {
        public static void main(String[] args) {
            // 使用普通功能类
            Target concreteTarget = new ConcreteTarget();//实例化一个普通类
            concreteTarget.request();
    
            // 使用特殊功能类,即适配类
            Target adapter = new Adapter();
            adapter.request();
        }
    }

    对象适配器(通过组合)

    实际上是通过适配器把需要的PowerB作为powerA的属性,然后初始化Adapter把powerB作为对象,这个时候adapter就相当于powerB一样操作

    接口适配器:

    设计一个接口,提供了默认方法,对想要的功能提供一个抽象类,抽象出其中的功能,然后用具体的实现类实现。

    5.观察者模式

    相当于微信公众号的订阅关系,如果说订阅了公众号,那么只要公众号一更新关注公众号的人就可以直接收到消息

    好文:https://www.cnblogs.com/luohanguo/p/7825656.html

  • 相关阅读:
    private static final long serialVersionUID = 1L;
    HashMap和Hashtable的区别
    MySQL中tinytext、text、mediumtext和longtext详解
    char、varchar、text和nchar、nvarchar、ntext的区别
    java获取文件夹下文件名
    java删除文件
    js判断浏览器
    nodejs调试:node-inspector
    [转]各种开源协议介绍 BSD、Apache Licence、GPL V2 、GPL V3 、LGPL、MIT
    [IBM]掌握Ajax,Ajax中的高级请求和响应
  • 原文地址:https://www.cnblogs.com/ljq2622/p/11254143.html
Copyright © 2020-2023  润新知