小白,在复习软件构造的时候被这几个模式给弄得头晕脑胀,因此决定总结一下课程上所学到的,主流的软件构造模式。
结构型模式
1.适配器模式
将某个类/接口转换为client期望的其他形式
其实就是对类/接口的一个再封装
代码例子使用了老师上课所使用的课件:
我们可以把适配器模式看作:我们带着中国的充电器去新加坡旅游,但是新加坡酒店的充电接板不适配,我们需要一个转换器,这里便是这个作用。
2.装饰器模式
实际上Java提供的工具包中,IO相关工具就普遍大量使用了装饰器模式,例如充当装饰功能的IO类如BufferedInputStream等,又被称为高级流,通常将基本流作为高级流构造器的参数传入,将其作为高级流的一个关联对象,从而对其功能进行扩展和装饰。
装饰器模式使用分层对象,动态透明地对单个对象添加职责。
如下图所示:
装饰器实现修饰对象(Component)的接口,所有请求都转发给它处理,在转发请求之前/之后增加额外功能。使用步骤是:
1.用一个Decorator实现/继承需要修饰的对象Component;
2.在Decorator中增加一个Component的引用;
3.在Decorator的构造器中,增加一个Component参数来初始化Component;
4.在Decorator类中,使用Component的引用,将所有请求转发至Component的相应方法;
5.ConcreteDecorator中所有Override自Component的方法做相应调整。
3.外观模式
把对多个方法的调用整合成一个方法
与适配器方法的区别在于,适配器对一个类/方法进行再封装,而外观模式对多个方法进行再封装。
我们先看一个使用外观模式的例子,首先定义了三个子系统类
下面展示一些 内联代码片
。
// An highlighted block
下面展示一些 `内联代码片`。
public class SubSystemA {
public void functionA(){
System.out.println("子系统A方法");
}
}
public class SubSystemB {
public void functionB(){
System.out.println("子系统B方法");
}
}
public class SubSystemC {
public void functionC(){
System.out.println("子系统C方法");
}
}
//使用外观模式定义了一个高层接口,这个接口定义了调用子系统的方法
public interface Facade {
void methodA();
void methodB();
void methodC();
}
//接口调用子系统的具体实现
public class FacadeImpl implements Facade {
private SubSystemA subSystemA;
private SubSystemB subSystemB;
private SubSystemC subSystemC;
public FacadeImpl(){
subSystemA = new SubSystemA();
subSystemB = new SubSystemB();
subSystemC = new SubSystemC();
}
@Override
public void methodA() {
System.out.println("methodA");
subSystemA.functionA();
}
@Override
public void methodB() {
System.out.println("methodB");
subSystemB.functionB();
subSystemC.functionC();
}
@Override
public void methodC() {
System.out.println("methodC");
subSystemA.functionA();
subSystemC.functionC();
}
}
public class Test1 {
public static void main(String[] args) {
Facade facade = new FacadeImpl();
facade.methodA();
facade.methodB();
facade.methodC();
}
}
后续的几个模式会在之后更新,敬请期待吧~
如果有错误,欢迎各位大哥在