设计模式之适配器模式与外观模式

定义:将一个类的接口,转换成客户期望的另一个接口。当需要用一个现有的类而其接口并不符合你的需要时就用适配器。属于结构性设计模式

适用场景:

  1. 已经存在的类它的方法和需求不匹配
  2. 适配器模式不是软件设计阶段考虑的设计模式,是随着软件维护,由于不同产品、不同厂家造成功能类似而接口不相同情况下的解决方案

首先来个类图:


这个类图够简单但是充满了良好的OO设计原则,使用对象组合,以修改的接口包装被适配者:被适配者的任何子类都可以搭配着适配器使用。

//一个已经存在的类220v充电器
public class AC220 {

    public int outputAC220(){
        int output = 220;
        System.out.println("输出交流电压"+output+"V");
        return output;
    }
}

// 一个直流电压5v
public interface DC5 {
    int outputDC5V();
}


//220v适配5v适配器
// 将一个类的接口AC220,转换成客户期望的另一个接口DC5
public class PowerAdapter implements DC5 {

    //适配器模式将一个对象包装起来以改变其接口
    private AC220 ac220;
    public PowerAdapter(AC220 ac220){
        this.ac220 = ac220;
    }
    @Override
    public int outputDC5V() {
        int adapterInput = ac220.outputAC220();
            //变压器...
        // 适配器使用被适配者接口把请求转换成被适配者的一个或多个调用接口
        int adapterOutput = adapterInput/44;
        System.out.println("使用 PowerAdapter 输入 AC:"+adapterInput+"V"+"输出DC:"+adapterOutput+"V");
        return adapterOutput;
    }
}

public class DCAdapterTest {
    public static void main(String[] args) {
        //客户通过调用目标接口适用适配器的方法对适配器发出请求
        DC5 dc5 = new PowerAdapter(new AC220());
        dc5.outputDC5V();
    }
}

适配器模式UML:

总结一把:适配器模式将一个对象包装起来以改变其接口。装饰者将一个对象包装起来以增加新的行为和责任。而外观将一群对象包装起来以简化接口。

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

来个图:

 


public class HomeTheaterFacade{

    Tuner tuner;
    DvdPlayer dvdplayer;
    CdPlayer cdplayer;
    Screen screen;
    


    public HomeTheaterFacade(Tuner tuner,DvdPlayer dvdplayer,
                            CdPlayer cdplayer,Screen screen){

            this.tuner=tuner;
            this.dvdPlayer=dvdPlayer;
            this.cdPlayer=cdPlayer;
            this.screen=screen;

//外观将子系统的组件引入构造器中
    }



    public void watchMovie(){


        tuner.on();
        
        dvdPlayer.on();
        dvdPlayer.setDvd();
        cdplayer.setCd();
        screen.down();

        

//将子系统的组件整合成一个统一的接口





    }










}

记住:外观不止是简化了接口,也将客户从组件的子系统中解耦。这也就是最少知识原则。外观和适配器可以包装很多类,但是外观的意图是简化接口,而适配器的意图是将接口转换成不同的接口。

最少知识原则:就任何对象而言,在该对象的方法内,我们只调用如下方法。

  1. 该对象本身
  2. 被当做方法的参数传进来的对象
  3. 此方法所创建的或者实例化的对象
  4. 对象的任何组件

 

 

Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值