有关主流的软件构造模式--小白理解

小白,在复习软件构造的时候被这几个模式给弄得头晕脑胀,因此决定总结一下课程上所学到的,主流的软件构造模式。

结构型模式

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();
    }
}


后续的几个模式会在之后更新,敬请期待吧~
如果有错误,欢迎各位大哥在
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值