首页 > 其他分享 >设计模式_极简实现_适配器模式

设计模式_极简实现_适配器模式

时间:2023-04-07 21:44:41浏览次数:32  
标签:插头 极简 适配器 System public 设计模式 void

此系列开篇,说一下目的:

  1. 笔者在实际工作中用到的设计模式十分有限,久而久之很多概念也模糊了,所以想要重新梳理一下;
  2. 网络上很多讲设计模式的文章,写的很好,但是无法给读者一个最为直观的体会,直接展示上百行代码,足够深入但不浅出;
  3. 笔者在学习过程中希望真正理解设计模式,即以自己想到的例子套用魔偶个设计模式,但是例子是否恰当,笔者也不敢拍胸脯保证,写出来的话欢迎大家批评指教。

废话不多说,先来看适配器模式。

例子:

  转换插头。

  我有一只国标插头,左零右火,地线在上面。当我去到欧洲,只能使用欧标的插座,也是左零右火,但是形状不一样,地线的接法也不一样。此时我需要一个国标转欧标的转换插头。

 

public class ChinesePlug {
    //你的国标插头
    public void provideZeroWirePlug() {
        System.out.println("ChineseZeroWirePlug");
    }
    public void provideFireWirePlug() {
        System.out.println("ChineseFireWirePlug");
    }
    public void provideGroundWirePlug() {
        System.out.println("ChineseGroundWirePlug");
    }
}
public interface EuropeanPlugIn {
    //理解为一种规范,不局限于一个插座,所有的插座都是同一规范
    public abstract void acceptZeroWirePlug();
    public abstract void acceptFireWirePlug();
    public abstract void acceptGroundWirePlug();
}
public class ChnEuAdaptor extends ChinesePlug implements EuropeanPlugIn{
    public ChnEuAdaptor() {
    }
    //把国标插头接上欧标转换器
    @Override
    public void acceptZeroWirePlug() {
        System.out.print("EuropeanZeroWirePlugIn accepts: ");
        provideZeroWirePlug();
    }
    @Override
    public void acceptFireWirePlug() {
        System.out.print("EuropeanFireWirePlugIn accepts: ");
        provideFireWirePlug();
    }
    @Override
    public void acceptGroundWirePlug() {
        System.out.print("EuropeanGroundWirePlugIn accepts: ");
        provideGroundWirePlug();
    }
}
public class Main {
    public static void main(String[] args) {
        //转换插头在手,无视国标插头的存在
        EuropeanPlugIn epi = new ChnEuAdaptor();
        //直接把转换器插插座里
        epi.acceptZeroWirePlug();
        epi.acceptFireWirePlug();
        epi.acceptGroundWirePlug();
    }
}

个人认为适配器模式的优点在于:

  1. 你不必魔改你的国标插头或者欧标插座
  2. 将国标插头接入适配器后,你可以无视国标插头的存在,在使用过程中,你用一个欧标的插头(转换器)接入了一个欧标的插座;在测试类中,ChinesePlug完全不存在

它的缺点在于:

  1. 很显然你需要多带一个适配器

当然适配器模式远不止这么简单,它的实现多种多样,这将会在之后的文章中讨论。

 

标签:插头,极简,适配器,System,public,设计模式,void
From: https://www.cnblogs.com/muzphy/p/17292340.html

相关文章

  • 你不会还不知道JavaScript常用的8大设计模式?
    JavaScript常用的8大设计模式有工厂模式:工厂模式是一种创建对象的模式,可以通过一个共同的接口创建不同类型的对象,隐藏了对象的创建过程。单例模式:单例模式是一种只允许实例化一次的对象模式,可以通过一个全局访问点来访问它。建造者模式:建造者模式是一种创建复杂对象的模式,通......
  • 贯穿设计模式第一话--单一职责原则
    ......
  • JDK中有关23个经典设计模式
    下面是JDK中有关23个经典设计模式的示例,在stakeoverflow也有相应的讨论:http://stackoverflow.com/questions/1673841/examples-of-gof-design-patternsStructural(结构模式)Adapter:把一个接口或是类变成另外一种。java.util.Arrays#asList()javax.swing.JTable(TableMod......
  • 【过滤器设计模式详解】C/Java/JS/Go/Python/TS不同语言实现
    简介过滤器模式(FilterPattern)或标准模式(CriteriaPattern),是一种结构型模式。这种模式允许使用不同的标准条件来过滤一组对象,并通过逻辑运算的方式把各条件连接起来,它结合多个标准来获得单一标准。例子将创建一个Person对象、Criteria接口和实现了该接口的实体类,来过滤Perso......
  • Android设计模式之单例模式
    之前的一篇文章「Android开发如何进阶?」提到设计模式可谓是进阶必备,对设计模式的理解与运用对你之后的代码书写与架构设计有很多的帮助作用,那么从今天开始我就抽时间不定期来给大家分享下设计模式系列。什么是设计模式?其实简单的理解就是前人留下来的一些经验总结而已,然后把这些经......
  • 前端设计模式——MVC模式
    MVC模式(Model-View-Controller):是一种前端和后端都广泛应用的设计模式。它将应用程序的业务逻辑、数据表示和用户界面分离,使得开发人员可以独立地修改各部分而不影响其他部分。MVC设计模式有助于提高代码的可读性、可维护性和可重用性。MVC是Model-View-Controller的缩写,它将一个......
  • 设计模式之————依赖注入(Dependency Injection)与控制反转(Inversion of Controll
     参考链接:依赖注入(DI)or控制反转(IoC)laravel学习笔记——神奇的服务容器PHP依赖注入,从此不再考虑加载顺序名词解释IoC(Inversion of Controller) 控制反转(概念)DI(Dependency Inject) 依赖注入(IoC概念中的一种类型实现)通过依赖声明自动实例化依赖的类(通常通过反......
  • 设计模式(三十二)----综合应用-自定义Spring框架-自定义Spring IOC-自定义Spring IOC
    1自定义SpringIOC总结1.1使用到的设计模式工厂模式。这个使用工厂模式+配置文件的方式。单例模式。SpringIOC管理的bean对象都是单例的,此处的单例不是通过构造器进行单例的控制的,而是spring框架对每一个bean只创建了一个对象。模板方法模式。AbstractApplicationC......
  • 设计模式六大原则
    转载自https://www.cnblogs.com/huansky/p/13700861.html引言对于设计模式,自己很早之前就看了好多本设计模式书籍,其中一些还看了好几遍,也一直希望自己能在编码的时候把这些设计模式用上去。可是,在日常的打码中,用的做多的就是单例,其次是观察者和建造者模式(builder)用得比较......
  • java23设计模式原型模式
    浅克隆packagecom.bjsxt.prototype;importjava.io.Serializable;importjava.util.Date;publicclassSheepimplementsCloneable,Serializable{//1997,英国的克隆羊,多利!privateStringsname;privateDatebirthday;@Overrideprotected......