使程序拥有更好的的
设计模式的原则:设计“设计模式”时,遵守的原则,这样设计的依据
即一个类只负责一个职责,如有多个职责应分为多个类
一个类对另一个类的依赖应当建立在最小接口上
如存在一个接口Interface1
存在4个方法a()
、b()
、c()
、d()
,它有一个实现类Impl1
实现了它的四个方法。现存在类Class1
需要使用接口中的b()
和c()
方法,即Class1
依赖与Interface1
,使用uml类图表示如图
对于实现类Impl1来说,a()
和d()
方法没有被使用,可以无需实现,却必须要书写。此时出现代码的冗余。根据接口隔离原则,可以将Interface1
接口进行拆分
此时如果有另一个类需要使用b()
、c()
、d()
三个方法时,需要将上图中的Interface2
再拆分一次
至此,ClassA
对ImplA
的依赖,ClassB
对ImplB
的依赖,建立在最小接口上
例1:打印出来源的信息
不遵守依赖倒转原则的写法
public class RawDependenceReversal {
public static void main(String[] args) {
Person p = new Person();
p.receive(new Email());
}
}
class Email{
public String getInfo(){
return "电子邮件信息";
}
}
class Person{
public void receive(Email e){
System.out.println(e.getInfo());
}
}
此时,若Person
类可以接收的来源不只是Email,还需要添加其他来源时,会比较麻烦。
遵守依赖倒转原则进行改进:
public class ImproveDependenceReversal {
public static void main(String[] args) {
Persons p = new Persons();
p.receive(new Emails());
p.receive(new WeChat());
}
}
interface Sender{
public String getInfo();
}
class Emails implements Sender{
@Override
public String getInfo(){
return "电子邮件信息";
}
}
class WeChat implements Sender{
@Override
public String getInfo() {
return "微信信息";
}
}
class Persons{
public void receive(Sender e){
System.out.println(e.getInfo());
}
}
依赖倒转的使用方式示例\
方式1:使用接口方式来进行依赖(调用方法时使用接口作为参数)。此时,依赖的是接口而不是细节类,因此符合依赖倒转原则
interface IOpenAndClose{
void open(ITV tv);
}
class OpenAndClose implements IOpenAndClose{
@Override
public void open(ITV tv) {
tv.play();
}
}
interface ITV{
void play();
}
方式2:通过构造方法来进行依赖
interface IOpenAndClose{
void open();
}
interface ITV{
void play();
}
class OpenAndClose implements IOpenAndClose{
public ITV tv;
public OpenAndClose(ITV tv){
this.tv = tv;
}
@Override
public void open() {
this.tv.play();
}
}
方式3:通过setter方法来进行依赖
interface IOpenAndClose{
void open();
public void setTv(ITV tv);
}
interface ITV{
void play();
}
class OpenAndClose implements IOpenAndClose{
private ITV tv;
@Override
public void open() {
this.tv.play();
}
@Override
public void setTv(ITV tv) {
this.tv = tv;
}
}
注意事项和细节
public
方法。23种分为三大类
创建型模式
单例模式、抽象工厂模式、原型模式、建造者模式、工厂模式
结构型模式
适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式
行为型模式
模板方法模式、命令模式、访问者模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式
原文:https://www.cnblogs.com/Weihaom/p/14234985.html