[笔记]设计模式

依据尚硅谷

设计模式的七大原则

1、单一职责

降低类的复杂度,职责要单一。一个类最好只有一个引起它变化的原因,否则考虑拆分。

2、接口隔离原则(其潜在的风险就是接口爆炸=)

接口要精简单一。一个接口的行为太多时,考虑拆分接口。

3、依赖倒置原则

高层不应该依赖低层,抽象不应该依赖细节。面向接口编程,细节交给实现类,而不是面向实现编程。

注意事项和细节

  1. 底层的模块尽量都要有抽象类或者是接口 , 或者两个都要有 , 使得程序更有缓冲的余地 , 模块的稳定性更好
  2. 变量的声明尽量是抽象类或者是接口 , 这样使得我们的变量引用和实际的对象之间 , 就存在一个缓冲层 , 有利于程序的扩展和优化
  3. 继承的时候遵循里氏替换原则
  • 这里的依赖注入联合接口的运用:

    • package cn.luchen;
      
      interface MyTV {
             
          public void use();
      }
      
      interface operational {
             
          public void open();
      
          public void setMyTV(MyTV myTV);
      }
      
      public class DependencyPass {
             
          public static void main(String[] args) {
             
              MyLGTV myLGTV = new MyLGTV();
              OperateMyTV operateMyTV = new OperateMyTV();
              operateMyTV.setMyTV(myLGTV);
              operateMyTV.open();
          }
      }
      
      class MyLGTV implements MyTV {
             
          @Override
          public void use() {
             
              System.out.println("我的LG电视正在打开!");
          }
      }
      
      class OperateMyTV implements operational {
             
          MyTV myTV;
      
          @Override
          public void setMyTV(MyTV myTV) {
             
              this.myTV = myTV;
          }
      
          @Override
          public void open() {
             
              myTV.use();
          }
      }
      
    • 这里的意思就是 我的 operateMyTV 想要使用(依赖) MyLGTV, 但是因为依赖倒置的原则, 为了模块的稳定性所以我不能够直接在 operateMyTV 初始化 MyLGTV , 而是 operateMyTV 去使用 MyLGTV 的接口.

4、里氏替换原则

开闭原则的补充,子类继承父类,父类引用即可代表子类。合理使用继承 , 在适当的情况下可以使用 聚合 组合 依赖的方式来解决问题

​ 或者, 子类尽量不要overwrite父类的方法 , 如果迫不得已要重写的话 , 可以将A类的基础方法放入Base中 , 然后A类B类去继承Base

5、开闭原则 OCP (核心)

对扩展开放(对提供方开放修改),对修改关闭(对使用方的代码不修改)。抽象约束,封装变化。有规律的抽象出框架,变化的部分由实现封装具体实现。

​ 工具Base <–extends-- 工具s(修改或者是增加)

​ |

​ |

​ 使用class<--------- Client

6、迪米特原则

不要跟陌生人说话,只跟朋友说话。朋友指,当前类、当前类创建的实例以及实例的成员. 对自己依赖的类知道的越少越好

​ 也就是在局部变量里面不能出现 A a = new A();

​ 就像Controller和Service一样 不要把业务逻辑写在Controller里面

7、合成复用原则

聚合复用原则,如果要跟陌生人说话,采用组合的方法与其他类建立联系。

采用继承复用时需遵守里氏替换原则。

聚合复用、里氏替换算是开闭原则的具体实现

设计原则的核心思想

  1. 找出应用中可能需要变化的地方 , 把它们独立出来 , 不要和哪些不需要变化的代码混合在一起
  2. 针对接口编程 , 而不是针对具体实现编程
  3. 为了交互对象之间的低耦合设计而努力

创建型(站在对象的角度-设计代码)

单例模 [重点]

适用对象: 工具类对象 , 数据源 , session工厂

​ 所谓的单例设计模式 , 就是采取一定的方法保证整个软件系统中, 对于某一类只能存在一个对象实例, 并且该类只提供一个取得其对象的方法(静态方法)

推荐使用: 饿汉式 , 静态内部类方式 , 双重检查方式 , 枚举方式**

步骤:

  1. 构造器私有化 (防止使用new创建实例)
  2. 在该类的内部创建对象
  3. 向外暴露一个静态的公共方法. getInstance();

代码实现

  • 饿汉式

    1. 静态变量

      package cn.luchen.structuralFormula.Singleton;
      
      /**
       * 饿汉式(静态变量)
       * 优点: 写法简单 , 避免了线程同步的问题
       * 缺点: 没有达到懒加载的效果 , 如果没有用过这个会造成内存的浪费
       * 结论: 可以使用, 但是有可能会造成内存的浪费
       * 什么时候会发生类装载:
       */
      public class EagerManDemo_1 {
             
          public static void main(String[] args) {
             
              EagerSingleton1 instance = EagerSingleton1.getInstance();
              EagerSingleton1 instance1 = EagerSingleton1.getInstance();
              System.out.println(instance1.hashCode() + "+" + instance.hashCode());
          
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值