【设计模式】java设计模式汇总

java设计模式汇总,各个模式说明以及代码示例
摘要由CSDN通过智能技术生成

设计模式



设计七原则

  • 单一职责

    高内聚,低耦合。每个类专注于做一件事情,职责是引起变化的原因,提高内聚来减少引起变化的原因,职责越多,引起变化的原因越多

  • 开闭原则

    对扩展开放,对修改关闭。对类的改动是通过增加代码进行,而不是修改现有的代码,一个类一旦设计完成,就可以独立完成其工作,而不要对其进行任何尝试的修改

  • 里氏替换原则

    在任何父类出现的地方都可以用他的子类来替代

  • 依赖倒置原则

    依赖于抽象,不依赖具体实现

  • 接口隔离原则

    使用多个隔离的接口,而不是使用单个接口,降低依赖耦合

  • 合成复用原则

    合成复用原则就是指在一个新的对象里通过关联关系(包括组合关系和聚合关系)来使用一些已有的对象,使之成为新对象的一部分;新对象通过委派调用已有对象的方法达到复用其已有功能的目的。简言之:要尽量使用组合/聚合关系,少用继承。

  • 迪米特原则

    一个实体应当尽量少的与其他实体之间发生相互作用,使得系统功能模块相对独立

设计模式三大分类

  • 创建型模式

    对象实例化的模式,用于解耦对象的实例化过程

  • 结构型模式

    把类或对象结合在一起形成一个更大的结构

  • 行为型模式

    类和对象交互,职责划分

创建型模式

1.单例模式

某个类只能有一个实例,提供一个全局的访问点

 //懒汉式:需要时再实例化,同步保证【线程安全】,有一定的性能损耗
 public class Singleton {
   
    private static Singleton instance = null;

    private Singleton() {
   
    }

    public static synchronized Singleton getInstance() {
   
        if (instance == null) {
   
            instance = new Singleton();
        }
        return instance;
    }
}
 //饿汉式:类加载时就初始化,线程天生安全;浪费内存,容易产生垃圾对象
 public class Singleton1 {
   
    private Singleton1() {
   
    }

    public static final Singleton1 single = new Singleton1();

    public static Singleton1 getSingle() {
   
        return single;
    }
}
 //双重校验锁
 public class Singleton2 {
   
    private volatile static Singleton2 singleton2;
    private Singleton2() {
   
    }
    public static Singleton2 getInstance() {
   
        if (singleton2 == null) {
   
            synchronized (Singleton2.class) {
   
                if (singleton2 == null) {
   
                    singleton2 = new Singleton2();
                }
            }
        }
        return singleton2;
    }
}
 //静态内部类,利用类加载机制
 public class Singleton {
   
    private static class SingletonHolder {
   
        private static final Singleton INSTANCE = new Singleton();
    }

    private Singleton() {
   
    }

    public static final Singleton getInstance() {
   
        return SingletonHolder.INSTANCE;
    }
}
 //枚举 (public final class T extends Enum;public static final T INSTANCE;)
public enum Singleton {
   
    INSTANCE,;
    public void get() {
   

    }
}
//static类型的属性会在类被加载之后才会初始化。java 类加载以及初始化都是线程安全的,虚拟机在加载枚举类的时候,会使用ClassLoader类的loadClass方法,这个方法使用同步代码块保证线程安全。

//单例并发的问题,主要解决的就是初始化过程中的线程安全问题
2.工厂模式

工厂方法、简单工厂、抽象工厂

//工厂接口
public interface IFactory {
   
    Operation CreateOption();
}

//加法类工厂
public class AddFactory implements IFactory {
   

    public Operation CreateOption() {
   
        return new OperationAdd();
    }
}

//客户端调用
IFactory factory = new AddFactory();
Operation operationAdd =  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值