1.设计模式解决的问题
- 类过于庞大
- 类在设计时,实现多复用,高内聚,低耦合
- 容易兼容新接口
2.七大设计原则
- 单一职责原则
- 开闭原则
- 里氏代换原则
- 依赖倒转原则
- 接口隔离原则
- 合成|聚合复用原则
- 迪尔特原则
一个类只有一个职责
2.开闭原则
对扩展开放,对修改关闭
如何将工资从3000提升到8000的问题
用代码编写两个数的加减
package com.yufan.operation;
/**
*
* @ClassName: Calculate
* @Description: 实现两个数的加减法
* @author 雨ゆこ
* @date 2018年3月7日
*
*
*/
public class Calculate {
/**
*
* @Title: add
* @Description:加法运算
* @param @param n1
* @param @param n2
* @param @return 参数
* @return double 返回类型
* @throws
*/
public double add(double n1, double n2){
return n1 + n2;
}
/**
*
* @Title: sub
* @Description: 减法运算
* @param @param n1
* @param @param n2
* @param @return 参数
* @return double 返回类型
* @throws
*/
public double sub(double n1, double n2){
return n1 - n2;
}
}
不易扩展,如果添加乘法与除法,需要修改该类,再添加两个方法
另一种思路
package com.yufan.operation;
/**
*
* @ClassName: Operator
* @Description: 抽象类 操作
* @author 雨ゆこ
* @date 2018年3月7日
*
*
*/
public abstract class Operator {
/**
*
* @Title: getResult
* @Description: 抽象方法 计算两个数运算的结果a
* @param @param n1
* @param @param n2
* @param @return 参数
* @return double 返回类型
* @throws
*/
public abstract double getResult(double n1, double n2);
}
package com.yufan.operation;
/**
*
* @ClassName: Add
* @Description:
* @author 雨ゆこ
* @date 2018年3月7日
*
*
*/
public class Add extends Operator {
@Override
public double getResult(double n1, double n2) {
// TODO Auto-generated method stub
return n1 - n2;
}
}
package com.yufan.operation;
/**
*
* @ClassName: Sub
* @Description:
* @author 雨ゆこ
* @date 2018年3月7日
*
*
*/
public class Sub extends Operator{
@Override
public double getResult(double n1, double n2) {
// TODO Auto-generated method stub
return n1 + n2;
}
}
3.里氏代换原则 LSP
子类替换掉父类后程序正常运行且结果跟预期相同才允许继承
- 拒绝子类有自己的个性
- 一旦子类有了“个性”,则与父类之间的关系难以调和
- 会让代码的耦合变得扑朔迷离
- 要针对接口编程,不要针对实现编程
- 高层模块不应该依赖底层模块,两者应该都以来抽象
5.接口隔离原则 ISP Interface Segregation Principle
- 客户端不应该依赖它不需要的方法
- 类间的依赖关系应该建立在最小的接口上
6.合成/聚合复用原则 CARP Composite/Aggregate Reuse Principle
- 合成是强烈的关联,部分(将)和整体(主)生命周期一样,整体(主)对部分(将)有支配权,包括创建和销毁的权利,一般在构造函数中使用
- 聚合是部分和整体的普通关联,类属性
- 尽量使用合成/聚合,而不是用继承
7.迪米特原则 LOD The law of Demeter
- 不要和陌生人说话(最少知识原则)