设计原则

作者: Ludwig_van | 来源:发表于2020-03-14 08:28 被阅读0次

1 . 单一职责原则:一个类或者一个接口只负责一项功能,开发中尽量设计出功能单一的接口;
2. 依赖倒转原则: 高层模块不应该依赖低层模块的具体实现而是依赖其抽象,即面向接口编程;(多态特点的使用);例如:

interface Toy{ //商品接口
  Double printPrice();//价格
  void sale();//售卖
}
 //具体实现类:男性商品
public class ManToy implements Toy{
  @Override
  public Double printPrice(){};
  @Override
  public void sale(){};
}
 //具体实现类:女性商品
public class WmToy implements Toy{
  @Override
  public Double printPrice(){};
  @Override
  public void sale(){};
}

当顾客购买男性商品时 ,超市会提供男性商品saleManToy() ,如果某一天一位女性顾客要买女性商品,当然我们要生产出来女性商品,但是超市没有女性类商品的售卖权,所以就不能提供女性商品服务;怎么解决呢?
高层依赖低层具体实现:
如果一天顾客要买女性商品,超市要办理女性商品的售卖权;
如果一天顾客要买儿童商品,超市要办理儿童商品的售卖权;
......

public Market class {
  //依赖具体实现类ManToy 
  public void saleManToy(ManToy toy){
    toy.printPrice();
    toy.sale();
    ...
  }
  //依赖具体实现类WmToy 
  public void saleManToy(WmToy toy){
    toy.printPrice();
    toy.sale();
    ...
  }
}
public class Test {
 public static void main(String[] arg0 ){
    Market market = new Market ();
    //通过具体实现类调用的效果
    //购买男性商品
    ManToy toy=new ManToy();
    market.saleManToy(toy);
    //购买女性商品
    WmToy toy =new WmToy();
    market.saleWmToy(toy);
    //后续可能由于业务需求会增加儿童商品等
    ......
  }
} 

后来超市经理经过思考,办理了一个通用的商品经营牌照,只要是符合商品特性(实现Toy接口)都可以售卖。

public Market class {
  //依赖低层抽象接口
  public void saleToy (Toy  toy){
    toy.printPrice();
    toy.sale();
    ...
  }
}
//依赖注入有三种方式:参数声明注入,构造方法注入,setter注入,上述为接口参数声明注入。
构造方法注入:
public Market class {
  private Toy  toy;
  public Market(Toy  toy){
    this.toy = toy;
  }
  public void saleToy (){
    this.toy.printPrice();
    this.toy.sale();
    ...
  }
}
// setter注入:
public Market class {
  private Toy  toy;
  public void setToy(Toy  toy){
    this.toy = toy;
  }
  public void saleToy (){
    this.toy.printPrice();
    this.toy.sale();
    ...
  }
}
public class Test {
 public static void main(String[] arg0 ){
   ManToy toy=new ManToy();
   WmToy toy =new WmToy();
//上述的三种注入方式实现如下:
//参数声明
    Market market = new Market ();
    market.saleToy(toy);
//构造方法注入
    Market market = new Market (toy);
    market.saleToy();
//setter注入
    Market market = new Market ();
    market.setToy(toy);
    market.saleToy();
  }
} 

JDBC就是此设计原则的体现。
java提供接口规范,各类数据库厂商根据规范提供数据库驱动;
当高层业务变更需要更换数据库时,只需要把数据库驱动换一下就好了;

//加载MySql的驱动类
Class.forName("com.mysql.jdbc.Driver") ;
Connection con = DriverManager.getConnection("url" , "username" , "password" ) ;

3. 开闭原则:程序对外扩展开放,对修改关闭;

  1. 迪米特法则:一个对象应该对其他对象保持最少的了解,尽量降低类与类之间的耦合度;
  2. 里氏代换原则:所有引用基类(父类)的地方必须能透明地使用其子类的对象;
  3. 接口隔离原则:客户端不应该依赖它不需要的接口,一个类对另一个类的依赖应该建立在最小的接口上;

相关文章

网友评论

    本文标题:设计原则

    本文链接:https://www.haomeiwen.com/subject/lcupshtx.html