大家好,欢迎来到IT知识分享网。
01 6大设计原则详解
- 开闭原则(Open Close Principle)
- 里氏代换原则(Liskov Substitution Principle)
- 依赖倒转原则(Dependence Inversion Principle)
- 接口隔离原则(Interface Segregation Principle)
- 迪米特法则,又称最少知道原则(Demeter Principle)
- 合成复用原则(Composite Reuse Principle)
6大设计原则详解:
02 23种设计模式详解
2.1 单例模式(Singleton Pattern)
(1)定义
Ensure a class has only one instance, and provide a global point of access
to it.(确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实
例。)
(2)通用代码:(是线程安全的)
public class Singleton { private static final Singleton singleton = new Singleton(); //限制产生多个对象 private Singleton(){
(3)使用场景
- 要求生成唯一序列号的环境;
- 在整个项目中需要一个共享访问点或共享数据,例如一个 Web 页面上的计数器,可以不用把每次刷新都记录到数据库中,使用单例模式保持计数器的值,并确保是线程安全的;
- 创建一个对象需要消耗的资源过多,如要访问 IO 和数据库等资源;
- 需要定义大量的静态常量和静态方法(如工具类)的环境,可以采用单例模式(当然,也可以直接声明为 static 的方式)。
(4)线程不安全实例
public class Singleton { private static Singleton singleton = null; //限制产生多个对象 private Singleton(){ } //通过该方法获得实例对象 public static Singleton getSingleton(){ if(singleton == null){ singleton = new Singleton(); } return singleton; } }
(5)解决办法
在 getSingleton 方法前加 synchronized 关键字,也可以在 getSingleton 方法内增加 synchronized 来实现。
2.2 工厂模式
2.3 抽象工厂模式(Abstract FactoryPattern )
2.4 模板方法模式(Template MethodPattern )
2.5 建造者模式(Builder Pattern )
2.6 代理模式(Proxy Pattern )
2.7 原型模式(Prototype Pattern )
2.8 中介者模式
2.9 命令模式
2.10 责任链模式
2.11 装饰模式(Decorator Pattern )
2.12 策略模式(Strategy Pattern )
2.13 适配器模式(Adapter Pattern )
2.14 迭代器模式(Iterator Pattern )
2.15 组合模式((Composite Pattern)
2.16 观察者模式(Observer Pattern )
2.17 门面模式(Facade Pattern )
2.18 备忘录模式(Memento Pattern
2.19 访问者模式(Visitor Pattern
2.20 状态模式(复杂)
2.21 解释器模式(Interpreter Pattern )(少用)
2.22 享元模式(Flyweight Pattern)
2.23 桥梁模式(Bridge Pattern)
篇幅有限,已将全部详解整理成下面的PDF文档,如下所示:
(需要完整版的小伙伴可以后台 私信 “学习” 免费获取)
03 设计模式面试必备+解析
- 请列举出在 JDK 中几个常用的设计模式?
- 什么是设计模式?你是否在你的代码里面使用过任
- Java 中什么叫单例设计模式?请用 Java 写出线程安全的单例模式
- 在 Java 中,什么叫观察者设计模式(observer design pattern
- 使用工厂模式最主要的好处是什么?在哪里使用?
- 举一个用 Java 实现的装饰模式(decorator design pattern) ?它是作用于对象层次还是类层次?
- 在 Java 中,为什么不允许从静态方法中访问非静态变量?
- 设计一个 ATM 机,请说出你的设计思路?
- 在 Java 中,什么时候用重载,什么时候用重写?
- 举例说明什么情况下会更倾向于使用抽象类而不是接口?
详细解析如下:
最后
需要以上文中的全部设计模式完整版知识总结的朋友可以 转发+私信 “学习” 免费领取!!!
还有更多学习笔记和资料分享如下:
终极手撕之架构:分布式+开源框架+微服务+性能优化!!!!
(kafka,MQ,Memcached,Ngnix,Redis,Zookeeper,MongoDB,MyBatis,SpringMVC,Spring,Dubbo,SpringBoot,SpringCloud,JVM,MySQL,Tomcat)
最后在说一次,如果你对分享的东西感兴趣,那么注意一下免费获取方式:
转发+转发+转发+私信 “学习”即可免费领取!!!!
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/161702.html