设计模式遵守的设计原则
单一职责原则
是什么?
一个类只负责一个职责
好处?
降低类的复杂度
提高类的可读性 维护性
减低变更引起的风险
接口隔离原则
是什么 ?
一个类对另一个类的依赖应该建立在最小的接口上
依赖倒置原则
是什么?
面向接口编程,高层模块不应该依赖底层模块,而是应该依赖抽象类或者接口;
抽象不应该依赖细节,细节应该依赖抽象;
对于细节的多变性,抽象的比较稳定.
好处?
抽象类或者接口制定好规范,具体细节有子类实现
实现
1)接口传递
package dp.denpanceinversionprinciple;
public class TestCase1 {
public static void main(String[] args) {
B b = new BaseB();
A a = new BaseA();
a.operation1(b);//接口依赖
}
}
interface A{
public void operation1(B b);//接口依赖
}
class BaseA implements A{
@Override
public void operation1(B b) {
b.methodb();
}
}
interface B{
public void methodb();
}
class BaseB implements B{
@Override
public void methodb() {
System.out.println("extends BaseB methodb");
}
}
2)构造方法传递
package dp.denpanceinversionprinciple;
public class TestCase2 {
public static void main(String[] args) {
AA a = new BaseAA(new BaseBB());//构造方法依赖
a.operation1();
}
}
interface AA{// 抽象类不能有构造方法
public void operation1();
}
class BaseAA implements AA{
private BB b;
public BaseAA(BB b) {//构造方法依赖
this.b = b;
}
@Override
public void operation1() {
b.methodb();
}
}
interface BB{
public void methodb();
}
class BaseBB implements BB{
@Override
public void methodb() {
System.out.println("extends BaseB methodb");
}
}
3)set方法传递
package dp.denpanceinversionprinciple;
public class TestCase3 {
public static void main(String[] args) {
AAA a = new BaseAAA();
BBB b = new BaseBBB();
a.setB(b);//set方法依赖
a.operation1();
}
}
interface AAA{// 抽象类不能有构造方法
public void setB(BBB b);
public void operation1();
}
class BaseAAA implements AAA{
private BBB b;
public void setB(BBB b) { //set方法依赖
this.b = b;
}
@Override
public void operation1() {
b.methodb();
}
}
interface BBB{
public void methodb();
}
class BaseBBB implements BBB{
@Override
public void methodb() {
System.out.println("extends BaseB methodb");
}
}
里氏替换原则
是什么?
类和类之间的引用尽量减少使用继承,多使用聚合 组合 依赖等减少父类变化引起子类的变化。
在使用继承时,尽量少重写父类中的方法。
开闭原则
是编程中最基础最重要的设计原则
是什么?
对扩展开发,对修改关闭(调用方的修改)
迪米特原则
是什么?
类调用别的类时,对调用方知道越少越好 。一个类对自己依赖的类知道的越少越好。
合成复用原则
是什么?
原则是尽量使用合成、聚合的方式,而不是使用继承