# design-mode **Repository Path**: dongqunwansui/design-mode ## Basic Information - **Project Name**: design-mode - **Description**: 设计模式 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-02-10 - **Last Updated**: 2021-12-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 设计六原则 - 总原则 开闭原则:对扩展开放,对修改关闭 - 依赖倒置原则(好莱坞原则:Don’t call me,I will call you.):**高层模块不依赖于底层模块**,两者都依赖抽象;抽象不依赖具体,具体依赖于抽象,面向接口编程(高层模块定义接口、底层模块实现接口,接口的归属权归于高层模块,这就强迫按照高层模块的需要去设计底层模块需要实现的方法,从而使设计的接口更符合业务的需要) - 里式替换原则:所有使用基类的地方都可以用它的子类代替(用来判断继承是否合理) 子类不能比父类更严格 eg. if ..else.. 违反开闭原则;新增新的shape类型,不增加else if,新类型无法取代shape基类,违反里式替换原则 ```java void drawShape(Shape shape) { if (shape.type == Shape.Circle ) { drawCircle((Circle) shape); } else if (shape.type == Shape.Square) { drawSquare((Square) shape); } else { …… } } ``` 修改后 ```java interface Shape{ void draw(); } void drawShape(Shape shape){ shape.draw(); } ``` - 单一职责原则 - 接口隔离原则 - 迪米特法则(最少知道原则) - 合成复用原则:多用聚合少用继承 # GOF 23种设计模式 ## 创建型(3/5) - [x] **工厂**(控制对象的创建) - [x] **抽象工厂**(控制对象的创建) - [x] **单例**(控制对象的创建) - [ ] build - [ ] 原型 ## 结构型(3/7) - [x] **代理** - [x] **适配器**(对象转换) - [x] **装饰**(减少类的增加) - [x] 桥接(减少类的增加) - [x] 组合(单个与整体) - [x] 外观(简化外部调用) - [x] 享元(减少类的增加) ## 行为型(6/11) - [x] **责任链**(链) - [x] **命令**(请求执行解耦) - [x] **观察者**(一对多依赖关系) - [x] **状态**(对象行为随属性变化) - [x] **策略**(多分枝重构) - [x] **模板方法**(父类定义骨架、子类重新重点步骤) - [x] 迭代器(集合查找) - [ ] 解释器 - [ ] 中介者 - [ ] 备忘录 - [ ] 访问者