• 设计模式-适配器模式和外观模式


    1.适配器模式

    适配器模式是针对接口不一时处理的情况,比如我的类的参数是IInterface1,但是我现在想要调用IInterface2接口的函数,怎么办呢?就是用适配器来解决这个问题:

    public interface IInterface1(){
        public void method1();
    }
    public interface IInterface2(){
        public void method2();
    }
    public class adapter implements IInterface1{
        IInterface2 v;
        public adapter(IInterface2 t){
            this.v=t;
        }
        public void method1(){
            v.method2();
        }
    }

    现在我们调用IIterface2的method1的方法的时候,就是可以直接构造一个适配器来完成

    public class A{
        
        public void method3(IInterface1 t)
        {
            t.method1();
        }
        
        public static void main(String[] arg)
        {
            (new A()).method3(new adapter(claimplementInterfce2));
        }
    }

    其中claimplementInterface2是实现Interface2的一个类的实例。这种适配器的方法被称作为对象适配器,还有一种适配器,叫做类适配器,是基于类的多继承的,其中适配器继承自要适配的两个类,用其中一个类的方法调用另一个类,思想是一致的,不过java不支持多继承,所以也就是只能用对象适配器。

    适配器模式:将一个类的接口,转换成客户期望的另一个接口,适配器让原本接口不兼容的类可以合作无间

    2.外观模式

      外观模式,其实就是对一个子系统的方法进行整理,对外公开一些方法,方便外部的调用,但是并不是对这些类的一个封装,只是提供了一个简单的接口,用户如果觉得没什么用出,可以直接调用子系统的方法,而且,一个子系统可以有很多个外观。所以外观模式的定义如下

    外观模式:提供一个统一的接口,用来访问子系统的一群接口。外观定义了一个高层接口,让子系统更容易使用。

    比如我们用电脑,怎么开机,怎么关机呢:

    public class UseComputer{
        ZHUJI zhuji;
                    XIANSHIQI xianshiqi;
                ...
        public UseComputer(ZHUJI zhuji,XIANSHIQI xianshiqi,....)
        {
            this.zhuji=zhuji;
            this.xianshiqi=xianshiqi;
            .....
        }
        public void guanji()
        {
            zhuji.off();
            xianshiqi.off();
        }
        public void kaiji()
        {
            xianshiqi.on();
            zhuji.on();
        }
    }

    这样就直接提供给用户开机和关机的操作了,而不用用户自己去调用开机关机的一系列的方法了。

    3.设计原则

    最少知识原则:只和你的密友谈话

    需要做到这个原则,建议只调用一下的范围的方法:

    对象本身
    被当作方法的参数而传递进来的对象
    此方法所创建或实例化的任何对象
    对象的任何组组件
  • 相关阅读:
    whereis which type find
    souce and bash 的区别
    systemctl daemon-reload
    linux /etc/profile bashrc bash_profile
    ulimt 和 sysctl
    MySQL 问题总结
    asyncio
    Linux 中 MySQL 操作
    总结一波 Redis 面试题
    os 模块 和 re 模块
  • 原文地址:https://www.cnblogs.com/xtestw/p/3955914.html
Copyright © 2020-2023  润新知