(每个类或者每个方法只需要实现一个职责,不需要实现很多其他的功能。)在类中的方法足够多需要在类的层面遵守单一职责原则
方法遵循单一职责代码实现:
package com.example;
public class SingleResponsibility {
public static void main(String[] args) {
Vehicle vehicle = new Vehicle();
vehicle.runAir("飞机");
vehicle.runRolad("车子");
vehicle.runWater("游艇");
}
}
class Vehicle{
public void runRolad(String vehicle){
System.out.println(vehicle + "在公路上面运行");
}
public void runWater(String vehicle){
System.out.println(vehicle + "在水中上面运行");
}
public void runAir(String vehicle){
System.out.println(vehicle + "在天上运行");
}
}
A通过接口B依赖于C(只要实现接口B的1,2,3方法),D通过接口B依赖于F(只需要 实现接口B的1,4,5方法),这样A就得实现所有的B接口的方法,D就得实现所有的B接口方法,导致浪费,且相关性强,所以得遵循接口最小原则,把 方法1 放在一个接口Interface1, 方法 2,3放在一个接口Interface2 ,方法4,5放在一个接口Interface3.
package com.monkey.single.inversion;
public class DependenceInversion {
public static void main(String[] args) {
Person person = new Person();
person.receiveMessage(new Email());
}
}
class Email{
public String getInfo(){
return "email,helloWorld";
}
}
//1.这个只可以接收邮箱的消息,不可以接收其他的比如微信,支付宝,短信的消息。
//2.我们可以来创建一个接口IReceiver(),这样Person类和接口IReceiver发生依赖
//因为Email,WeChat等等属于接收的范围,他们各自实现IReceiver接口就行,这样就发生了依赖倒转。
class Person{
// 这里是对实现类进行了依赖
public void receiveMessage(Email email){
System.out.println(email.getInfo());
}
}
package com.monkey.single.inversion;
public class DependenceInversion {
public static void main(String[] args) {
Person person = new Person();
person.receiveMessage(new Email());
person.receiveMessage(new Wexin());
}
}
interface Ireceiver{
public String getInfo();
}
class Email implements Ireceiver{
public String getInfo(){
return "email,helloWorld";
}
}
class Wexin implements Ireceiver{
public String getInfo(){
return "wexin,helloWorld";
}
}
//1.这个只可以接收邮箱的消息,不可以接收其他的比如微信,支付宝,短信的消息。
//2.我们可以来创建一个接口IReceiver(),这样Person类和接口IReceiver发生依赖
//因为Email,WeChat等等属于接收的范围,他们各自实现IReceiver接口就行,这样就发生了依赖倒转。
class Person{
// 这里是对接口进行依赖,稳定性好
public void receiveMessage(Ireceiver ireceiver){
System.out.println(ireceiver.getInfo());
}
}
实现接口间依赖传递的三种方式:
代码:
经典面试题目?
在项目的实际开发中哪里使用了ocp原则? (工厂模式中有用)
spring中应用了哪些设计模式,原型模式在哪里 用到?
什么是解释器设计模式?画出它的UML类图,分析各个角色是什么?
spring框架中哪里使用到了解释器设计模式?并做源码级别分析
单例模式一共有几种实现方式?用代码实现,并说明各个的优点缺点。
单列设计模式有几种实现方式?
饿汉式 两种
懒汉式 三种
双重检查
静态内部类
设计模式概念:(design pattern)是对在软件设计普遍存在(反复出现)的各种问题,提出 的一种解决方案。
使用设计模式可以使用项目具有:可扩展性,维护性,可靠性(新增一个功能对原来的功能影响不大),可复用性,效率提高等等