目录
一、设计模式的目的
二、设计模式七大原则
1、单一职责原则
2、接口隔离原则
3、依赖倒转原则
4、里氏替换原则
5、开闭原则
6、迪米特法则
7、合成复用原则
设计原则核心思想
编写软件的过程中,程序员面临着来自耦合性,内聚性以及可维护性,可扩展性,重用性,灵活性等多方面的挑战,设计模式是为了让程序具有更好的:
设计模式的七大原则有:
概念:对类来说,即一个类应该只负责一项职责。
如类A负责两个不同职责:职责1、职责2。当职责1需求变更而改变A类时,可能造成职责2执行错误,因此要将类A的粒度分解为A1、A2。
概念:客户端不应该依赖它不需要的接口,即一个类对另一个类的依赖应该建立在最小的接口上。
通俗一点来说就是一个类通过接口去依赖另一个类时,这个接口不应该存在太多多余的方法。可以将大的接口拆分成多个小的接口。
我们现在有一个接口,接口里面有五个方法,然后有一个类B和类D分别实现了该接口。然后类A和类C分别通过这个接口去依赖类B和类D,但是他们只会用到接口的部分方法,第一种写法如下:
package com.cxc.principle.segregation;
/**
* 实现:类B和类D分别去实现接口1
* 然后类A通过接口1依赖类B(使用了1,2,3方法)
* 类C通过接口1依赖类D(使用了1,4,5方法)
*/
public class Segregation1 {
public static void main(String[] args) {
A a = new A();
a.depend1(new B()); //类A通过接口去依赖类B
}
}
/**
* 接口1
*/
interface Interface1{
void operation1();
void operation2();
void operation3();
void operation4();
void operation5();
}
class B implements Interface1{
@Override
public void operation1() {
System.out.println("B 实现了operation1");
}
@Override
public void operation2() {
System.out.println("B 实现了operation2");
}
@Override
public void operation3() {
System.out.println("B 实现了operation3");
}
@Override
public void operation4() {
System.out.println("B 实现了operation4");
}
@Override
public void operation5() {
System.out.println("B 实现了operation5");
}
}
class D implements Interface1{
@Override
public void operation1() {
System.out.println("D 实现了operation1");
}
@Override
public void operation2() {
System.out.println("D 实现了operation2");
}
@Override
public void operation3() {
System.out.println("D 实现了operation3");
}
@Override
public void operation4() {
System.out.println("D 实现了operation4");
}
@Override
public void operation5() {
System.out.println("D 实现了operation5");
}
}
/**
* A类通过Interface1依赖B类,但是只会用到1,2,3方法
*/
class A{
public void depend1(Interface1 i){
i.operation1();
}
public void depend2(Interface1 i){
i.operation2();
}
public void depend3(Interface1 i){
i.operation3();
}
}
/**
* C类通过Interface1依赖D类,但是只会用到1,4,5方法
*/
class C{
public void depend1(Interface1 i){
i.operation1();
}
public void depend4(Interface1 i){
i.operation4();
}
public void depend5(Interface1 i){
i.operation5();
}
}
上面这种代码实现的话,就不符合我们的接口隔离原则,接口隔离原则中强调我们要将接口依赖降低到最小接口,而不论是类A还是类C,依赖时都并没有使用到接口的全部方法。
因此我们要进行改进,将大接口分解成小接口