设计模式-11-外观模式

简介:为子系统中的一组接口提供一个统一的高层接口

目的:

总结:整合一组接口成一个接口

组成:被整合接口, 统一接口

1,被整合接口

package com.design.k.facade;
/**
 * 子服务A
 */
public interface SubAService {

    void methodA();
}
package com.design.k.facade;
/**
 * 子服务A
 */
public class SubAServiceImpl implements SubAService {

    @Override
    public void methodA() {
        System.out.println("子服务A - 方法A  ... ...  ");
    }

}
package com.design.k.facade;
/**
 * 子服务B
 */
public interface SubBService {

    void methodB();
}
package com.design.k.facade;
/**
 * 子服务B
 */
public class SubBServiceImpl implements SubBService {

    @Override
    public void methodB() {
        System.out.println("子服务B - 方法B  ... ...  ");
    }

}
package com.design.k.facade;
/**
 * 子服务C
 */
public interface SubCService {

    void methodC();
}
package com.design.k.facade;
/**
 * 子服务C
 */
public class SubCServiceImpl implements SubCService{

    @Override
    public void methodC() {
        System.out.println("子服务C - 方法C  ... ...  ");
    }

}

2,统一接口

package com.design.k.facade;
/**
 * 外观模式
 */
public interface FacadeService {

    /**
     * 外观模式
     * 
     * 将子服务进行任意组合通过外观模式提供统一的接口
     */
    void methodAB();
    void methodBC();
    void methodABC();
}

3,统一接口实现

package com.design.k.facade;

public class FacadeServiceImpl implements FacadeService {
    
    //初始化子服务
    private SubAService subAService;
    private SubBService subBService;
    private SubCService subCService;

    public FacadeServiceImpl() {
        super();
        this.subAService = new SubAServiceImpl();
        this.subBService = new SubBServiceImpl();
        this.subCService = new SubCServiceImpl();
    }
    public FacadeServiceImpl(SubAService subAService, SubBService subBService, SubCService subCService) {
        super();
        this.subAService = subAService;
        this.subBService = subBService;
        this.subCService = subCService;
    }

    @Override
    public void methodAB() {
        subAService.methodA();
        subBService.methodB();
    }

    @Override
    public void methodBC() {
        subBService.methodB();
        subCService.methodC();
    }

    @Override
    public void methodABC() {
        subAService.methodA();
        subBService.methodB();
        subCService.methodC();
    }

}

4,Main

package com.design.k.facade;
/**
 * 11-外观模式
 * 
 * 将多个服务做统一入口处理
 */
public class MainTest {

    public static void main(String[] args) {
        
        /**
         * 外观模式 - 就是将子服务整合为统一入口
         */
        FacadeService facadeService = new FacadeServiceImpl();
        facadeService.methodAB();
        facadeService.methodBC();
        facadeService.methodABC();
    }
}

5,Result

--------原始方法----开始-------------------
用户服务接口:  用户信息修改  。。。 。。。userId=1001
--------装饰器A----开始-------------------
装饰器A - 针对用户修改方法 - 添加的包装   - starting ... ... 
用户服务接口:  用户信息修改  。。。 。。。userId=1001
装饰器A - 针对用户修改方法 - 添加的包装   - end ... ... 
装饰器A - 针对用户服务 - 装饰的扩展方法   ... ... 

--------装饰器B----开始-------------------
装饰器B - 针对用户修改方法 - 添加的包装   - starting ... ... 
用户服务接口:  用户信息修改  。。。 。。。userId=1001
装饰器B - 针对用户修改方法 - 添加的包装   - end ... ... 
装饰器B - 针对用户服务 - 装饰的扩展方法   ... ... 

--------装饰器A && 装饰器B----开始-------------------
装饰器B - 针对用户修改方法 - 添加的包装   - starting ... ... 
装饰器A - 针对用户修改方法 - 添加的包装   - starting ... ... 
用户服务接口:  用户信息修改  。。。 。。。userId=1001
装饰器A - 针对用户修改方法 - 添加的包装   - end ... ... 
装饰器B - 针对用户修改方法 - 添加的包装   - end ... ... 
装饰器B - 针对用户服务 - 装饰的扩展方法   ... ... 
原文地址:https://www.cnblogs.com/wanhua-wu/p/7221705.html