此系列开篇,说一下目的:
- 笔者在实际工作中用到的设计模式十分有限,久而久之很多概念也模糊了,所以想要重新梳理一下;
- 网络上很多讲设计模式的文章,写的很好,但是无法给读者一个最为直观的体会,直接展示上百行代码,足够深入但不浅出;
- 笔者在学习过程中希望真正理解设计模式,即以自己想到的例子套用魔偶个设计模式,但是例子是否恰当,笔者也不敢拍胸脯保证,写出来的话欢迎大家批评指教。
废话不多说,先来看适配器模式。
例子:
转换插头。
我有一只国标插头,左零右火,地线在上面。当我去到欧洲,只能使用欧标的插座,也是左零右火,但是形状不一样,地线的接法也不一样。此时我需要一个国标转欧标的转换插头。
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(); } }
个人认为适配器模式的优点在于:
- 你不必魔改你的国标插头或者欧标插座
- 将国标插头接入适配器后,你可以无视国标插头的存在,在使用过程中,你用一个欧标的插头(转换器)接入了一个欧标的插座;在测试类中,ChinesePlug完全不存在
它的缺点在于:
- 很显然你需要多带一个适配器
当然适配器模式远不止这么简单,它的实现多种多样,这将会在之后的文章中讨论。
标签:插头,极简,适配器,System,public,设计模式,void From: https://www.cnblogs.com/muzphy/p/17292340.html