6个设计原则

1.单一职责原则

    简单点说就是一个方法、接口只要自己的单一职责就行了

2.里氏替换原则

    2.1 所有引用基类的地方必须能透明地使用其子类的对象。

    //比如有个抽象类,AbstractGun,有方法shoot()
	//它的子类有 AK47,HandGun
	//当我们实例化一个AbstractGun的时候,
	AbstractGun gun = new HandGun();
	AbstractGun.shoot();
	//所有父类出现的地方都可以换成子类,并不会出现Bug

    2.2 覆盖或实现父类的方法时输入参数可以被放大

    public class Father {
	  public Collection doSomething(HashMap map){
	    System.out.println("父类被执行...");
	    return map.values();
	  }
	}
    public class Son extends Father {
	  //放大输入参数类型,注意,这里是重载(Overload),不是重写(Override)父类方法
	  //也就说子类仍然有 父类的 public Collection doSomething(HashMap map) 方法
	  public Collection doSomething(Map map){
	    System.out.println("子类被执行...");
	    return map.values();
	  }	
	}

	//使用场景
	public class Client {
		public static void invoker(){
	      //父类存在的地方,子类就应该能够存在
	      Father f = new Father();//Son f = new Son() //换成这句,执行结果是一样的
	      HashMap map = new HashMap();
	      f.doSomething(map);
		}
	    public static void main(String[] args) {
	      invoker();
	    }
	}

	//但是如果父类的方法的入参是 Map,子类的方法是 HashMap,那么执行上述代码的时候,将会执行子类的HashMap方法,导致执行结果不一样。

3.依赖倒置原则(面向接口编程)

    3.1 高层模块不应该依赖低层模块,两者都应该依赖其抽象

    3.2 抽象不应该依赖细节

    3.3 细节应该依赖抽象    

    例如,有一个项目,有用户服务,和电影服务,每个服务都有 Api 和 Server

	那么依赖关系应该是:

	accountServer 依赖 accountApi

	movieServer 依赖 movieApi 和 accountApi

 

4.接口隔离原则

    建立单一接口,不要建立臃肿庞大的接口。再通俗一点讲:接口尽量细化,同时接口中的方法尽量少。客户端不应该依赖它不需要的接口

 

5.迪米特法则

    5.1 一个类只和自己的朋友交流(成员变量、方法的出入参称为朋友,但是方法内部的不是,也就是说,一个类的方法内部应该只调用和它朋友相关的方法,除了JDK的API和一些工具类)

    5.2 朋友之间也是有距离的(不应该暴露过多的public方法,然后让朋友去在一个业务逻辑里面调用,应该自己封装一个业务逻辑的public方法,同时把原来的public 改成 private,让朋友直接调用这一个业务方法,同时并不关心内部的实现逻辑)

    5.3 如果一个方法放在本类中,既不增加类间关系,也对本类不产生负面影响,那就放置在本类中。

 

6.开闭原则

    一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。

转载于:https://my.oschina.net/u/3582320/blog/1492598

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值