• 接口上常用的设计模式:外观模式(Facade),桥接模式(Bridge),结构型(structural)设计模式


    接口上最常用的设计模式,外观模式(Facade),桥接模式(Bridge),他们都是属于结构型Structural的设计模式。

    可能大伙对外观模式不是很熟啊,这是啥模式啊,其实平时我们是经常使用的,比如说,引入第三方的jar包,它提供的所有的api功能全在一个client类,我们

    只需要操作client这个类,调用就行了,这个就是外观模式啊。

    外观模式:这个外观类为子系统提供一个共同对外的接口。

    demo代码实现:

    public class FacadePraticeDay4 {
    
        /**
         * 模拟jar包的内部的接口
         */
        public static interface LogicService{
            void printName(String name);
        }
    
        /**
         * 模拟jar包的内部的接口实现1
         */
        public static class LogicServiceImpl1 implements LogicService{
    
            @Override
            public void printName(String name) {
                System.out.println(String.format("name:%s-%s","logicServiceImpl1",name));
            }
        }
        /**
         * 模拟jar包的内部的接口实现2
         */
        public static class LogicServiceImpl2 implements LogicService{
    
            @Override
            public void printName(String name) {
                System.out.println(String.format("name:%s-%s","logicServiceImpl2",name));
            }
        }
        /**
         * 模拟jar包的内部的接口实现3
         */
        public static class LogicServiceImpl3 implements LogicService{
    
            @Override
            public void printName(String name) {
                System.out.println(String.format("name:%s-%s","logicServiceImpl3",name));
            }
        }
    
        /**
         * 提供一个clientService给客户端访问
         * 里面是所有的接口功能实现
         */
        public static class ClientService{
            private LogicServiceImpl1 logicServiceImpl1;
            private LogicServiceImpl2 logicServiceImpl2;
            private LogicServiceImpl3 logicServiceImpl3;
    
            public ClientService() {
                this.logicServiceImpl1 = new LogicServiceImpl1();
                this.logicServiceImpl2 = new LogicServiceImpl2();
                this.logicServiceImpl3 = new LogicServiceImpl3();
            }
    
            public void printName1(String name){
                logicServiceImpl1.printName(name);
            }
    
            public void printName2(String name){
                logicServiceImpl2.printName(name);
            }
            public void printName3(String name){
                logicServiceImpl3.printName(name);
            }
        }
    
        public static void main(String[] args) {
            ClientService clientService = new ClientService();
            clientService.printName1("你叉叉");
            clientService.printName2("你叉叉");
            clientService.printName3("你叉叉");
        }
    }

    桥接模式,可能又有很多人不知道啊,这个模式好陌生啊,怎么会常用呢,其实真的是最常用的设计模式了,我们的MVC三层架构,controller里面放着service,这就是桥接模式

    这扩展一下知识点,什么是MVC模式:(模型-视图-控制器)

    M是业务模型,V是用户界面,C指控制器,使用MVC的目的是将M和V的代码分离,C的存在是确保M和V的同步,M一旦改变,V随之同步。

    controller里面使用@Autowired注解注入Service接口,这个service就是一个桥,可以放serviceImpl1,这个实现类,可以放serviceImpl2这个实现类

    代码实现:

    public class BridgePraticeDay5 {
    
        public static class MvcController{
            //这个就是桥,既可以连接impl1,可以连接impl2
            private MvcService mvcService;
    
            public MvcController(MvcService mvcService) {
                this.mvcService = mvcService;
            }
    
            public void execute(){
                this.mvcService.execute();
            }
        }
    
        public static interface MvcService{
            void execute();
        }
    
        public static class MvcServiceImpl1 implements MvcService{
    
            @Override
            public void execute() {
                System.out.println("execute1");
            }
        }
    
        public static class MvcServiceImpl2 implements MvcService{
    
            @Override
            public void execute() {
                System.out.println("execute2");
            }
        }
    
        public static void main(String[] args) {
            MvcController mvcController = new MvcController(new MvcServiceImpl1());
            mvcController.execute();
            mvcController = new MvcController(new MvcServiceImpl2());
            mvcController.execute();
        }
    }

    好的,到饭点了,吃饭了

  • 相关阅读:
    node设置跨域白名单
    vueInitVux中引入bootstrap、jquery步骤
    npm命令集合
    css横屏问题的设置
    verdaccio启动命令
    拖拽上传文件在火狐中会打开新窗口
    vue监听input输入框限制输入长度
    axios get请求传递参数 es6语法
    export default和export的使用
    webpack中如何使用vue
  • 原文地址:https://www.cnblogs.com/fuckingPangzi/p/15744291.html
Copyright © 2020-2023  润新知