设计模式

七大设计模式

  1. 开闭原则:是设计模式的总原则。开闭原则就是说对拓展开放,对修改关闭,模块应该在尽量不修改代码的前提下进行拓展。开闭原则要求我们尽量通过拓展来实现变化,尽可能少地改变已有模块。

    • 提高代码复用性
    • 提高代码可维护性
  2. 单一职责原则:简单来说就是保证设计类、接口、方法做到功能单一,权责明确。指的是一个类或者模块有且只有一个改变的原因。

    • 单一职责可以降低类的复杂性、提高代码可读性、可维护性
  3. 里式替换原则:所有引用基类的地方必须能够透明地使用其子类的对象

    • 里式替换可以提高代码复用性、子类继承父类时自动继承到父类的属性方法
    • 提高代码可拓展性
  4. 依赖倒置原则:程序要依赖于抽象接口,不要依赖于具体实现。简单来说就是要求对抽象进行编程,不要对具体实现进行编程。

  5. 接口隔离原则:客户端不应该依赖它不需要的接口,类间的依赖关系应该建立在最小接口上。

  6. 迪米特法则:也叫最少知识原则,一个实体应当尽可能少得与其他实体发生相互作用,初衷在于降低类之间的耦合

  7. 合用复用原则:通过将已有的对象纳入新对象中,作为新对象的成员对象来实现的,新对象可以调用已有对象的功能,从而达到复用。

    rcwh5S

    单例模式:在一个系统中,一个类有且仅有一个对象实例

    饿汉式的单例模式在初始化的时候即创建了对象,在需要的时候可以直接返回该对象实例。
    /**
     * @ClassName Singleton2
     * @Description 饿汉式设计模式,直接在类创建的时候就生成静态成员变量供外部使用,即预先加载法,所以不存在线程安全性的问题
     * @Author zhangshao
     * @Date 2020/2/29 10:25
     **/
    public class Singleton2 {
        //使用类变量来缓存创建过的实例
        private static final Singleton2 instance = new Singleton2();
    
        private Singleton2(){};
        public static Singleton2 getInstance(){
            return instance;
        }
    
        public static void main(String[] args) {
            Singleton2 s1 = Singleton2.getInstance();
            Singleton2 s2 = Singleton2.getInstance();
            System.out.println(s1 == s2);
    
        }
    }
    懒汉式的单例模式
    /**
     * @ClassName Singleton3
     * @Description 单例设计模式 单线程模式下的懒汉式单例模式,双检锁+volatile实现
     * @Author zhangshao
     * @Date 2020/3/4 15:35
     **/
    public class Singleton3 {
        private static volatile Singleton3 s = null;
        private Singleton3(){}
        public static Singleton3 getInstance(){
            if(null == s){
                synchronized (Singleton3.class){
                    if(null == s){
                        s= new Singleton3();
                    }
                }
            }
            return s;
        }
        public static void main(String[] args) {
            Singleton3 s1 = Singleton3.getInstance();
            Singleton3 s2 = Singleton3.getInstance();
            System.out.println(s1 == s2);
        }
    }
    

    单例模式的使用场景:创建一个对象需要消耗太多的资源或者在一个系统中不适合创建多个对象实例的情况下,采用单例模式解决。

    Instance instance =new Instance()

    • 在堆内存中分配对象的存储空间
    • 在堆内存上初始化对象
    • 设置instance指向刚分配的内存地址
全部评论

相关推荐

05-19 14:22
北华大学 Java
点赞 评论 收藏
分享
1. 自我介绍2. 项目都是自己写的吗?3. 我看你用 koa2 写后端,为什么选择它,能讲讲吗?4. 那你提到 koa2 它是不提供中间件的,你是怎么解决的?5. 中间件的原理是什么?(洋葱模型)6. 你刚刚说碰到 next() 就进入下一个中间件,那 next 只能执行同步,如果是异步的话,你是怎么处理的?(async/await,但是我发现,有的中间件需要在异步中间件之前执行,所以我用 try/catch 来处理异步中间件的异常)7. JS 异步发展史,以及它们的优缺点说一下 (回调函数--Promise--Generator--async/await)8. 你刚刚说 Promise 状态不能更改,那如果我要设计一个能修改 Promise 状态的函数,你会怎么设计?9. CSS 水平垂直居中的方法(flex、grid、绝对定位 + margin:auto、绝对定位 + 负 margin、绝对定位 + transform、table-cell)10. 你刚刚说到 flex 布局,那 flex:1 是什么意思?(flex: flex-grow  flex-shrink  flex-basis;等价 flex:1 1 0%表示元素可以均分剩余空间,可拉伸、可压缩,不依赖内容宽度,自动自适应填充布局。)11. 父容器宽是 500px,然后它左右各有两个子容器是 100px,如果设置 flex: 1,那它的宽度是多少?(500-100-100=300px)12. 说说你对浏览器缓存的理解(强缓存、协商缓存)13. 如果一个用户,他怎么去刷新都无法刷到最新版的代码,你能说下可能的原因吗?(版本号、hash等)还有吗?(我说我不知道了,面试官说还有 CDN 没有同步,我说企业才会这么干,自己写项目一般不会,我知道 cdn 是用来解决高并发的手段)14. React你熟吗?说下 React 函数组件和类组件的区别15. 怎么避免 Hooks 导致组件重新渲染?(使用 useCallback、useMemo、React.memo、useRef等等)16. 谈一下我对 React 的状态管理的理解(Redux、Mobx、Zustand,我说 Zustand 用的最多)17. React 常见的 hooks 有哪些?(useState、useEffect、useRef、useCallback、useMemo、useReducer、useContext、useImperativeHandle、useLayoutEffect、useDebugValue)18. TS 你熟吗?我们引进 TS 的目的是为什么?19. interface 和 type 的区别20. 说下 TS 里的泛型21. 我现在有十个字段,比如十个字段就要 A B C D E F G 这种。那我现在另有另外一个方法,这个方法接受的参数呢,必须是这个 interface A 里面的这个 K。就比如说你可以是 A B C 可以 A B C D 任何组合都可以,但是必须是这个 interface 里面的 A 里面的定义的。这个 K 这种类型的话是怎么去定义呢?(说实话我有点不太理解啥意思,反正我说了 keyof)``` TypeScriptinterface Obj {A: stringB: stringC: stringD: stringE: string// 其他字段...}```22. vite 用过吗?说说和 webpack 的区别。vite 的优缺点是什么23. 说说 Tree shaking(树摇) 和 Code Splitting (代码分割)的区别24. Git 你熟吗?说说 git merge 和 git rebase 的区别,什么时候用 git merge,什么时候用 git rebase?25. web3 你熟吗?(不太熟,听说过而已)26. 我看你自我介绍说了 AI,你是怎么用的?27. 除了提示词,还有什么能让 AI 更聪明?28. AI 的优缺点你说一下29. AI 发展这么快,你觉得我们以后会扮演什么角色?30. 反问基本都答上来了。面了我80分钟,我还以为稳过的
查看29道真题和解析
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务