??一个类文件只负责编写它所相关的类的功能。例如:User类, 该类负责描述用户; 那么,UserDao类,则只应该负责与User有关的方法的编写, User用户的CRUD等操作;如果还有Order, 那么有关Order的CRUD操作应该另外写进OrderDao类中。
??个人理解,即最小功能接口实现,实现类只需要实现自己需要的功能方法即可, 其他无关的功能方法不应该存在。
??
public interface Func {
void test1();
void test2();
void test3();
}
public interface Func1 {
void test1();
void test2();
}
public interface Func2 {
void test1();
void test3();
}
??以上, 3个接口, 如果类A指想要test1(), test2(), 则最好实现接口 Func1;如果想要test1(), test3(), 则应该实现接口 Func2。
??不应该直接实现接口Func, 因为这样会造成类A要多实现一个或多个无关的方法, 二违反接口隔离的原则。
??高层不应该依赖低层, 二者都应该依赖其抽象。
??细节依赖抽象, 抽象不应该依赖细节。
??因此, 接口或抽象类的设计, 是为了设计规范用的, 而具体的实现细节,在应该在实现类中完成。
??关于依赖倒置的具体如下:
public class VerseTest {
public static void main(String[] args) {
Person p = new Person();
// p.drive(new Car());
p.drive(new Bike());
}
}
class Person {
public void drive(Vehicle vehicle) {
vehicle.run();
}
}
interface Vehicle {
void run();
}
class Bike implements Vehicle {
public void run() {
System.out.println("自行车跑的较慢");
}
}
class Moto implements Vehicle {
public void run() {
System.out.println("摩托车跑的比较快");
}
class Car implements Vehicle {
public void run() {
System.out.println("小汽车跑的很快");
}
}
??以上即为依赖倒置的测试代码, 这个里面很明显是用到了Java中的多态的思路,父引用指向子类的实例。
??要求对于功能提供者, 提供扩展动作, 对于功能使用者,关闭修改动作。
??对于具体的功能实现, 要尽可能地提供更多可扩展操作; 对于功能的调用, 则尽可能地不予修改, 保持原样。
??以上说法, 必须以已有功能不受影响为前提。
??对于基类出现地地方, 他的子类可以在此处透明使用。
??个人理解, 对于父类引用的地方, 同样, 其子类也应该在此处被引用。 感觉与依赖倒置原则有些类似。
??里氏替换, 可能主要用于继承里较多一些。 但是如果使用继承, 则类之间地耦合关系会比较强, 例如, 如果父类有所修改, 会影响到它所有地子类, 造成可能出现额错误。 因此, 一般不是很建议使用继承, 而是使用组合, 聚合等方式。
??最少知道法则,一个实体应当尽量少的与其他实体之间发生相互作用,使得系统功能模块相对独立。
??原则是尽量使用合成/聚合的方式,而不是使用继承。
原文:https://www.cnblogs.com/bigfish-blog/p/14136168.html