“这是我参与8月更文挑战的第22天,活动详情查看:8月更文挑战”
一、Interface Segregation Principle接口隔离原则
(一)、接口隔离原则定义
接口隔离原则是指用多个专门的接口,而不使用单一的总接口,客户端不应该依赖他不需要的接口。
一个类对一类的依赖应该建立在最小的接口之上
建立单一接口不要建立庞大臃肿的接口
尽量细化接口,接口中的方法尽量少
(二)、接口隔离原则优点
(1)、符合高内聚,低耦合
(2)、具有很好的可读性、可扩展性和可维护性
(三)、案例代码
1、不满足接口隔离原则的情况
Animal接口:一个动物行为接口,包含吃、飞以及游泳行为
public interface Animal {
void eat();
void fly();
void swim();
}
Bird类实现:
public class Bird implements Animal{
@Override
public void eat() {
}
@Override
public void fly() {
}
@Override
public void swim() {
}
}
Dog类实现:
public class Dog implements Animal{
@Override
public void eat() {
}
@Override
public void fly() {
}
@Override
public void swim() {
}
}
此时可发现,Bird类的swim方法只可空置,同样Dog类的fly方法也只可空置。
2、符合接口隔离原则的情况
EatAnimal接口:动物吃行为
public interface EatAnimal {
void eat();
}
FlyAnimal接口:动物飞行为
public interface FlyAnimal {
void fly();
}
SwimAnimal接口:动物游泳行为
public interface SwimAnimal {
void swim();
}
Dog类只实现EatAnimal和SwimAnimal接口:
public class Dog implements SwimAnimal,EatAnimal{
@Override
public void eat() {
}
@Override
public void swim() {
}
}
二、Law of Demeter 迪米特法则
(一)、迪米特原则定义
迪米特原则是指一个对象应该对其他对象保持最少的了解,又叫最少知道原则。尽量降低类与类之间的耦合。迪米特原则主要强调只和朋友交流,不和陌生人说话。
迪米特原则中的朋友是指:当前对象本身、当前对象的成员对象、当前对象所创建的对象、当前对象的方法参数等,这些对象存在关联、聚合或组合关系,可以直接访问这些对象的方法。
(二)、迪米特原则优点
(1)、降低了类之间的耦合度,提高了模块的相对独立性。
(2)、由于亲合度降低,从而提高了类的可复用率和系统的扩展性。
(三)、案例代码
1、不符合迪米特原则的情况 此时A不认识C只认识B,而B认识C。虽然实现了play(),但是不符合迪米特原则 A认识B,但是不认识C;而B认识C。
public class A {
B b = new B();
public void play() {
System.out.println("play");
b.play();
C c = new C();
c.play();
}
public static void main(String[] args) {
A a = new A();
a.play();
}
}
2、符合迪米特原则的情况 因为A认识B,所以只同B联系
public class A {
B b = new B();
public void play() {
System.out.println("Aplay");
b.play();
}
public static void main(String[] args) {
A a = new A();
a.play();
}
}
因为B认识C,所以通过B来联系C,而不是通过A直接联系C
public class B {
C c = new C();
public void play() {
System.out.println("Bplay");
c.play();
}
}