设计模式学习笔记

设计模式学习

  • 设计模式的目的

    在软件编写过程中,开发人员面对着来自耦合性、内聚性、可维护性、可扩展性、重用性以及灵活性等多方面的挑战,而设计模式是为了让程序(软件)具有更好的

    1. 代码重用性(相同的代码,不应该多次编写)
    2. 可读性(代码的规范性)
    3. 可扩展(增加新的功能,非常的方便)
    4. 可靠性(增加的新功能,对原来的功能没有影响)

    使程序具有高内聚、低耦合的特性

一、七大设计原则

设计模式中常用的七大原则有:

  • 单一职责原则
  • 接口隔离原则
  • 依赖反转原则
  • 里氏替换原则
  • 开闭原则(ocp)
  • 迪米特法则
  • 合成复用原则

1.1、单一职责原则

对类来说,一个类应该只负责一项职责。如果类A负责两个不同的职责:职责A1,A2。当职责A1改变时,可能会影响A2执行错误,所以需要将类A的粒度分解为A1,A2。

1.1.1、代码示例

  • 示例一

    /**
     * 单一职责原则
     * @ClassName SingleResp01
     * @Author lcc
     * @Date 2022/10/30 22:47
     * @Version 1.0
     */
    
    /**
     * 这种方式违反了类的单一职责原则,一个类负责多个职责
     */
    public class SingleResp01 {
    	public static void main(String[] args) {
    		Vehicle vehicle = new Vehicle();
    		vehicle.run("小汽车");
    		vehicle.run("大巴车");
    		vehicle.run("行搜母舰");
    
    	}
    }
    
    class Vehicle{
    	public void run(String vehicle){
    		System.out.println(vehicle + "在公路上跑...");
    	}
    }
    
    
  • 示例二

    /**
     * 单一职责原则02
     * @ClassName SingleResp02
     * @Author lcc
     * @Date 2022/10/30 22:47
     * @Version 1.0
     */
    
    /**
     * 这种模式完全遵循了单一职责原则,但是成本太大了,建的类很多
     */
    public class SingleResp02 {
       public static void main(String[] args) {
          RoadVehicle roadVehicle = new RoadVehicle();
          roadVehicle.run("大巴车");
          AirVehicle airVehicle = new AirVehicle();
          airVehicle.run("歼-17");
          WaterVehicle waterVehicle = new WaterVehicle();
          waterVehicle.run("行搜母舰");
       }
    }
    
    class RoadVehicle{
       public void run(String vehicle){
          System.out.println(vehicle + "在公路上跑...");
       }
    }
    
    class AirVehicle{
       public void run(String vehicle){
          System.out.println(vehicle + "在天上飞...");
       }
    }
    
    class WaterVehicle{
       public void run(String vehicle){
          System.out.println(vehicle + "在海里游...");
       }
    }
    
  • 示例三

    /**
     * 单一职责原则03
     * @ClassName SingleResp02
     * @Author lcc
     * @Date 2022/10/30 22:47
     * @Version 1.0
     */
    
    /**
     * 这种模式虽然在类上并没有遵循单一职责原则,
     * 但是在方法上遵循了单一职责原则
     */
    public class SingleResp03 {
       public static void main(String[] args) {
          Vehicle2 vehicle = new Vehicle2();
          vehicle.roadRun("兰博基尼");
          vehicle.airRun("直升机");
          vehicle.waterRun("轮船");
       }
    }
    
    class Vehicle2{
       public void roadRun(String vehicle){
          System.out.println(vehicle + "在公路上跑...");
       }
    
       public void airRun(String vehicle){
          System.out.println(vehicle + "在天上飞...");
       }
    
       public void waterRun(String vehicle){
          System.out.println(vehicle + "在海里游...");
       }
    }
    

1.1.2、总结

  • 降低类的复杂度,一个类只负责一项职责
  • 提高类的可读性、可维护性
  • 降低变更引起的风险
  • 通常情况下,我们应该遵循单一职责原则,只有当逻辑足够简单、类中的方法足够少,我们才可以在代码级别违反单一职责原则,在方法上遵循单一职责原则。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值