Adapter模式

  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包装了一样,所以这个模式也叫包装模式。

你可能感兴趣的:(Adapter模式)