Adapter模式的主要角色有target(目标类),adapter(配适器),adaptee(被配适类)以及Client(使用者),adapter实现target接口,同时又继承adaptee,client使用target就可以用到adaptee中的方法,案例如下:
用Adapter模式编写一个将属性集合保存至文件中的FileProperties类。我们知道,java.util.Properties可以实现这样的功能,但有时候我们需要的方法和Properties方法的功能一样或者相似,但因为方法名的不同,而不能直接使用Properties中的方法,比如,我们现在要使用FileIO中的方法去实现文件流操作,FileIO中的方法如下:
1 package t2020010601; 2 3 import java.io.IOException; 4 5 public interface FileIO { 6 public void readFromFile(String filename) throws IOException; 7 8 public void writeToFile(String filename) throws IOException; 9 10 public void setValue(String key, String value); 11 12 public String getValue(String key); 13 }
我们把FailIO作为Target,Properties作为adaptee,FileProperties作为adapter,其中FileProperties代码如下:
1 package t2020010601; 2 3 import java.io.FileInputStream; 4 import java.io.FileOutputStream; 5 import java.io.IOException; 6 import java.util.Properties; 7 8 public class FileProperties extends Properties implements FileIO { 9 10 @Override 11 public void readFromFile(String filename) throws IOException { 12 load(new FileInputStream(filename)); 13 } 14 15 @Override 16 public void writeToFile(String filename) throws IOException { 17 store(new FileOutputStream(filename), "written by FileProperties"); 18 } 19 20 @Override 21 public void setValue(String key, String value) { 22 setProperty(key, value); 23 } 24 25 @Override 26 public String getValue(String key) { 27 return getProperty(key, ""); 28 } 29 30 }
Main作为程序入口的同时也作为Client;
1 package t2020010601; 2 3 import java.io.IOException; 4 5 public class Main { 6 7 public static void main(String[] args) { 8 FileIO fileIO = new FileProperties(); 9 try { 10 fileIO.readFromFile("file.txt"); 11 fileIO.setValue("year", "2020"); 12 fileIO.setValue("month", "1"); 13 fileIO.setValue("day", "06"); 14 fileIO.writeToFile("newFile.txt"); 15 } catch (IOException e) { 16 17 // Auto-generated catch block 18 e.printStackTrace(); 19 20 } 21 } 22 23 }
在这里Main并不知道Properties中的方法实现,但可以通过fileio中的方法实现和properties中功能一样的方法,如同把properties包装了一样,所以这个模式也叫包装模式。
原文:https://www.cnblogs.com/xiaoyaomianbiren/p/12155120.html