设计模式

1.设计模式解决的问题

  • 类过于庞大
  • 类在设计时,实现多复用,高内聚,低耦合
  • 容易兼容新接口

2.七大设计原则

  • 单一职责原则
  • 开闭原则
  • 里氏代换原则
  • 依赖倒转原则
  • 接口隔离原则
  • 合成|聚合复用原则
  • 迪尔特原则
  1.单一职责原则   SRP 

        一个类只有一个职责   

    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

    子类替换掉父类后程序正常运行且结果跟预期相同才允许继承

  • 拒绝子类有自己的个性
  • 一旦子类有了“个性”,则与父类之间的关系难以调和
  • 会让代码的耦合变得扑朔迷离
4.依赖倒转原则        
  • 要针对接口编程,不要针对实现编程
  • 高层模块不应该依赖底层模块,两者应该都以来抽象

5.接口隔离原则    ISP   Interface Segregation Principle

  •     客户端不应该依赖它不需要的方法
  • 类间的依赖关系应该建立在最小的接口上

6.合成/聚合复用原则   CARP  Composite/Aggregate  Reuse Principle

  •  合成是强烈的关联,部分(将)和整体(主)生命周期一样,整体(主)对部分(将)有支配权,包括创建和销毁的权利,一般在构造函数中使用
  • 聚合是部分和整体的普通关联,类属性
  • 尽量使用合成/聚合,而不是用继承

 7.迪米特原则  LOD  The law of Demeter

  • 不要和陌生人说话(最少知识原则)

发布了72 篇原创文章 · 获赞 12 · 访问量 2万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章