概述
一、设计模式的七大原则
1)单一职责原则 ----设置类的时候
对类来说。一个类只做一件事。即一项职责。例如。一个dao 操作用户表又操作订单表。可这就有两个。所有可以划分为用户dao和订单dao.。降低类的复杂度
2)接口隔离原则-----设置接口的时候
客户端不要依赖他不需要的接口。即一个类对另一个类的依赖应该建立在最小的接口上。例如:一个接口里有多个方法。但是可能多个类实现这个方法。但是有些方法别的类又不用。这就不符合接口隔离原则。所以需要把接口拆成几个独立的类。
3)依赖倒转原则 ------设置接口做为参数的时候 mvc的server接口 ---impl去实现
面向接口编程,
电视 可做成一个接口。某某电视去实现这个电视接口的通用的方法如开关。按钮
抽象类不能new 可以被继承。接口可以new 要被实现
依赖关系传递的三种方式
1》接口传递
2》构造方法传递
3》setter方式传递
4)里氏替换原则
有原有的A基础B 到 A和B都基础一个基础的C类。
5)开闭原则
对扩展开放,对修改关闭。比如一个对象新增一个功能。不影响原有的。可用抽象类来
6)迪米特法原则
对象与对象直接保持最新联系。就是两个对象的交集要少。专业词就是耦合。
解决就是:各找各家。各回各妈。
7)合成复用原则
例如b继续A 只使用a的一个方法。这个耦合性就很高。这个就可以依赖A注入到B里面
1、单例模式
饿汉式
没调用都会有返回实例对象
和懒汉式
首先判断是否为null是空才new 对象。不是空就直接返回实例对象
应用有 集合里面的add方法。jdk1.7ArraiList 的默认object[]数组长度给你创建为10的长度。
jdk1.8 默认先不加载数组长度。等你正在添加数据的时候在给他加载数组长度。
普通懒汉式是线程不安全的。当多个线程某一个时候同时进来。那么会创建多个引用对象
所以就有了后来的:方法上架sync锁。可以保证多线程安全,但是这个锁太重了。效率低
所有又有了双重检索机制:即在引用变量上加上volatile,
volatile的作用就是保证变量的可见性。防止指令重排
就是一个线程修改了这个变量。另一个线程能立马知道改变化的值。
然后在方法里面先判断引用变量是否为空,再加代码块锁(对象类)。再判断引用变量是否为空。
还有一种是静态内部类的方式 创建实例对象的时候用静态方法。创建静态内部实例对象。
还有一种是枚举类型。
2、代理模式
定义:代理模式就是使用一个代理将对象包装起来,然后用该代理对象取代原来的对象。任何对原始对象的操作。都要通过代理对。代理对象决定是否以及何时将方法调用到原始对象上。
1)动态代理是指客户通过代理类来调用其它对象的方法。并且是在程序运行时根据需要动态创建目标类的代理对象。
使用场景:调试,远程方法调用
动态代理与相比的还有静态代理
抽象角色中声明所有方法都被转移到调用处理器一个集中的方法中处理
(动态就一个代理类搞定所有的其他代理类)
2)静态代理:
代理类和被代理类都实现接口工厂。代理类里面调用被代理类。去实现被代理类的方法
代理类和被代理类在编译期间,就确定下来了
面试题:哪里用到了反射。在动态代理的时候用到了反射。
什么是动态代理:
应用场景:spring的aop 就是动态代理 里面的动态代理类 去获取被代理的是时候就是用到了反射
用到了反射的classloal去加载被代理类。
3、简单工厂模式(创建型模式)
你一个类里面干了-类似于模块化的功能。这个时候你把这个模块化代码放到一个类里面。
别人通过调用这个类去使用。
4、解释器模式
5、原型模式 ---bean的创建
6、建造者模式 ---
最后
以上就是无限钢笔为你收集整理的java中常用的设计模式的全部内容,希望文章能够帮你解决java中常用的设计模式所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复