# design_pattern_java **Repository Path**: qyx4share/design_pattern_java ## Basic Information - **Project Name**: design_pattern_java - **Description**: java学习设计模式 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-01-17 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # UML ## 1.UML类图-基础概念 + public - private # protected ~ default +下有横线 static 方法: 斜体代表抽象方法,抽象方法的类必须是抽象类 接口的表示方法 <> 或 棒棒糖表示法 ## 2.UML类图-类关系 1.箭头方向 从子类指向父类 2.空心三角箭头 虚线(依赖)实现接口 实线(关联)继承 3.菱形 空心菱形 - 聚合(相同的东西聚在一起) 实心菱形 - 组合(已经有实体结构的存在) 数字是用来表示 实例个数,左边是下限,右边是上限 ## 3.UML时序图-对象交互关系 对象,生命线,控制焦点,消息 简单说就是为了描述类间按生命周期进行调用的逻辑 实现实心箭头代表同步调用,空心箭头代表异步调用,虚线代表返回 线上的名称代表方法名 # 设计原则 并不一定完全遵守,要符合实际情况的要求即可 实际开发中不符合这种规范,依赖,组合,聚合关系受到很多因素的影响,项目的规模,项目周期,技术人员的水平,对进度的把控,防止类爆炸(接口和方法要遵守) ## 1.开闭原则 所有原则的基础,类,模块,函数映带对扩展开放,修改关闭 用抽象构建框架,用实现扩展细节 ## 2.依赖倒置原则 高层模块不应该依赖低层模块,二者都应该依赖其抽象 抽象不应该依赖细节,细节应该依赖抽象 针对接口编程,不要针对实现编程 实现接口,或者继承抽象类,或者继承抽象类并实现接口 Spring的依赖注入和控制反转 ## 3.单一职责原则 不要存在多余一个导致类变更的原因 一个类/接口/方法只负责一项职责 ## 4.接口隔离原则 用多个专门的接口,而不使用单一的总接口 客户端不应该依赖它不需要的接口 一个类对一个类的依赖应该建立在最小的接口上 建立单一接口,不要建立庞大臃肿的接口 尽量细化接口,接口中的方法尽量的少,但是要适度,分析实际的业务模型是重点 ## 5.迪米特法则(最少知道原则) 一个对象应该对其他对象保持最少的了解 尽量降低类与类之间的耦合 也就是尽量使用private protected 以及包权限等的访问权限 朋友类:成员变量,方法的输入,输出参数中的类称为成员朋友类,主要判断是不是需要导入 出现在方法体内部的类不属于朋友类 ## 6.里氏替换原则 对开闭原则的补充 定义:如果对每一个类型T1的对象o1,都有类型为T2的对象o2,使得T1定义的所有程序P中的所有对象o1都替换成o2时,程序P的行为没有发生变化,那么T2是类型T1的子类型 扩展:一个软件实体如果适用一个父类,那一定适用于其子类,所有引用父类的地方必须能透明地使用其子类对象,子类对象能够替换父类对象,而程序逻辑不变 主要是维护继承体系不被破坏 子类可以扩展父类的功能,但不能改变父类原有的功能 1.子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法 2.子类可以增加自己特有的方法 3.当子类的方法重载父类的方法时,方法的前置条件(方法的输入/入参)要比父类方法的输入参数更宽松 4.当子类的方法实现父类的方法时(重写/重载或实现抽象方法),方法的后置条件(即方法的输出/返回值)要比父类更严格或相等 对openclose方法进行规约 ## 7.合成/复用原则(组合/复用原则) 尽量使用对象组合/聚合,而不是继承关系达到软件复用的目的 聚合has-A和组合contains-A (继承is-A) 什么时候用组合/聚合和什么时候用继承,就看类与类之间是否要暴露东西 ## 建议学习书籍 《大话设计模式》 ## 补充知识点 包的命名多个单词进行组合的时候,可全小写写成一个词 System.out.println 一般不要在项目中使用,因为里面含有锁