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

      设计模式(design pattern),是对软件设计中普遍存在(反复出现)的各种问题,所提出的解决方案是九十年代从建筑设计领域引入到计算机科学的

      设计模式的目的,是为了让程序(软件)具有更好的代码重用性、可读性、可扩展性、可靠性、使程序呈现高内聚、低耦合的特性

      设计模式遵循的七大原则:单一职责原则、接口隔离原则、依赖倒置原则、里氏替换原则、开闭原则、迪米特法则、合成复用原则

        1、单一职责原则,可以是类级别的,一个类只负责一项职责,可以是方法级别的,一个方法负责一项职责,只有类中方法数量足够少,可以在方法基本保持单一职责原则

        2、接口复杂的可以拆分成多个不同的接口,类分别与它们需要的接口建立依赖关系,就是接口隔离原则

      设计模式分三种类型,共23种: 

        1、创建型模式:单例模式、抽象工厂模式、原型模式、建造者模式、工厂模式

        2、结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式

        3、行为型模式:模板方法模式、命令模式、访问者模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责模式

      

      23种设计模式之模式释义

      一、创建型模式

      单例模式只创建一个类的实例(类对象)

        1) 保证线程安全,保证懒加载的方法之一双重检查

    public class SingletonTest06 {
    
        public static void main(String[] args) {
            System.out.println("双重检查");
            Singleton instance = Singleton.getInstance();
            Singleton instance2 = Singleton.getInstance();
            System.out.println(instance == instance2); // true
            System.out.println("instance.hashCode=" + instance.hashCode());
            System.out.println("instance2.hashCode=" + instance2.hashCode());
            
        }
    
    }
    
    // 懒汉式(线程安全,同步方法)
    class Singleton {
        private static volatile Singleton instance;
        
        private Singleton() {}
        
        //提供一个静态的公有方法,加入双重检查代码,解决线程安全问题, 同时解决懒加载问题
        //同时保证了效率, 推荐使用
        
        public static synchronized Singleton getInstance() {
            if(instance == null) {
                synchronized (Singleton.class) {
                    if(instance == null) {
                        instance = new Singleton();
                    }
                }
                
            }
            return instance;
        }
    }
    View Code

        2) 保证线程安全,保证懒加载的方法之一静态内部类

        3) 保证线程安全,保证懒加载的方法之一枚举类

        4) 保证线程安全,保证懒加载的方法之一饿汉模式

      单例模式保证了系统内存中只存在一个对象,使用场景为:需要频繁创建销毁的对象,创建对象耗时或耗资源,但又经常用到的对象工具类对象、频繁访问数据库或文件的对象

      二、结构型模式

      类适配器模式Adapter类,通过继承scr类,实现dst类接口,完成src->dst的适配

      对象适配器模式,基本思路和类的适配器模式相同,只是将Adapter类作了修改,不是继承src类,而是持有src类的实例,以解决兼容性的问题,即:持有scr类对象,实现dst类接口,完成src->dst的适配

      接口适配器模式,当不需要全部实现接口提供的方法时,可先设计一个抽象类实现接口,并为该接口中每个方法提供一个默认实现(空方法),那么该抽象类的子类(可采取匿名内部类)可有选择地覆盖父类的某些方法来实现需求

      三、行为型模式

      模板方法模式(模板模式),在一个抽象类公开定义了执行它的方法的模板(确定了除了模板方法的其他方法的执行顺序结构 ),它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行(执行模板方法)

      模板模式的钩子方法(抽象类),钩子方法什么也不做,在抽象类的子类,视需要重写钩子方法

      命令模式,为了消除发送者与接收者之间的耦合,在两者之间设定一个命令执行接口(可以发送命令,可以解除命令),发送者聚合接口,接收者聚合接口实现,接收者通过接口与发送者产生联系

      策略模式,核心思想是,多用组合/聚合,少用继承,用行为类组合,而不是行为的继承;关闭修改,开放扩展,增加行为不修改代码;每增加一个策略就要增加一个类,策略过多导致类数目庞大;策略模式定义算法族分别封装起来,让它们之间可以替换算法的变化独立于使用算法的客户

      具体实现:定义若干行为接口,每个接口由不同的行为的类继承并实现接口;客户类聚合行为接口(作为客户类属性),产生行为的多态和行为的多样性

      职责链模式,也叫责任链模式,为请求创建一个接收者对象的链,目的对请求的发送者和接受者进行解耦;每个接收者都包含对另一个接收者的引用,不能处理会把请求传给下一个接收者;发送者不需要知道由哪个接收者处理,由接收者链处理

      具体实现:创建一个抽象类,该类的一个属性包含该类的一个引用,用于指向下一个类对象(设计一个set方法指向下一个职责的类对象 ),同时含处理发送者请求的抽象函数处理请求,有若干不同职责的类(分别处理不同请求)继承该抽象类并实现处理函数;使用时,创建一个发送者类对象,创建若干不同职责的类对象,这些不同职责类对象以职责形成一个环链(调用set方法,传下一个职责类对象);无论把发送者对象传递给任何一个职责对象(职责对象调用处理函数,函数的参数是发送者对象),该发送者对象都会被处理

  • 相关阅读:
    【python】raise_for_status()抛出requests.HTTPError错误
    【python】python打包生成的exe文件运行时提示缺少模块
    单点登录原理与简单实现
    Java并发之AQS详解
    Java更新
    各种java面经资源
    HashMap与HashTable的区别
    Http 与Https
    SpringMVC运行原理
    Spring
  • 原文地址:https://www.cnblogs.com/GoldenEllipsis/p/14526776.html
Copyright © 2011-2022 走看看