adapter pattern java_适配器模式(Adapter Pattern)
適配器模式(Adapter Pattern) 是作為兩個不兼容的接口之間的橋梁。
例子:讀卡器是作為內存卡和筆記本之間的是適配器,內存卡插入讀卡器,讀卡器再插入筆記本電腦。
參考資料:?、
作用:將一個類的接口轉換成客戶希望的另一個接口。適配器模式使得原本由于接口不兼容而不能一起工作的那些類可以一起工作。
何時使用:1.要使用已有的一個類的方法,但是不符合我們的使用規范,且我們不知道其源碼,無法copy。2。建立一個重復使用的類,用于聯系一些彼此之間沒有太大聯系的類。3.通過接口的轉換,將一個類插入到另一個類中。
如何實現:繼承或者依賴。適配器繼承或者依賴已有的代碼,實現目標類的接口。
注意事項:適配器不是在詳細設計時添加的,而是解決正在服役的項目的問題。
適配器有兩種模式:這兩種的差別在于一個是繼承源角色類,一個是獲取源角色類的對象。
類適配器模式:(繼承源角色)
對象適配器模式:(獲取源角色對象)
差別:1.類適配器的話,因為是繼承了源角色類的關系,所以不能去處理源角色類的子類。而對象適配器則沒有關系,一個適配器可以將其源類和其子類都適配到目標接口。
2.類適配器可以重新定義源角色類的方法,通過重寫方法即可。而對象適配器的話只能通過適配器子類的方法來達到重寫源角色類的方法 。
代碼實現:類適配器模式
1 /**
2 * 目標角色
3 */
4 public interface Target {
5 //已有的方法
6 void sampleOp1();
7 //沒有但是想要實現的方法
8 void sampleOp2();
9 }
1 /**
2 * 源角色
3 */
4 public class Adaptee {
5
6 public void sampleOp1(){
7 System.out.println("sampleOp1...");
8 }
9 }
1 /**
2 * 適配器角色
3 */
4 public class Adapter extends Adaptee implements Target {
5
6 @Override
7 public void sampleOp2() {
8 System.out.println("sampleOp2....");
9 }
10 }
//測試
@Test
public void test()throws Exception{
Target target = new Adapter();
target.sampleOp1();
target.sampleOp2();
}
/*
*輸出
*sampleOp1...
*sampleOp2....
*/
代碼實現:對象適配器模式
1 /**
2 * 目標角色
3 */
4 public interface Target {
5 //已有的方法
6 void sampleOp1();
7 //沒有但是想要實現的方法
8 void sampleOp2();
9 }
10
11
12 /**
13 * 源角色
14 */
15 public class Adaptee {
16 public void sampleOp1(){
17 System.out.println("sampleOp1...");
18 }
19 }
20
21
22 /**
23 * 適配器角色
24 */
25 public class Adapter implements Target{
26 private Adaptee adaptee;
27
28 public Adapter(Adaptee adaptee) {
29 this.adaptee = adaptee;
30 }
31
32 @Override
33 public void sampleOp1() {
34 this.adaptee.sampleOp1();
35 }
36
37 @Override
38 public void sampleOp2() {
39 System.out.println("sampleOp2....");
40 }
41 }
//測試
@RunWith(SpringRunner.class)
@SpringBootTest
public class AdapterTest {
@Test
public void test()throws Exception{
Target adapter = new Adapter(new Adaptee());
adapter.sampleOp1();
adapter.sampleOp2();
}
}
/*
*sampleOp1...
*sampleOp2....
*/
除此之外,適配器模式還有一種應用。缺省模式
應用場景:我們要實現一個接口,但是在該接口的大量方法內部,我們只想要其中的少數一兩個。
在接口的實現中,必須要將其所有的方法進行重寫。所以會在代碼內有大量的空缺省的方法,造成類的臃腫。
適配器的缺省模式:一個抽象的適配器角色實現該接口。
目標角色繼承該抽象類。只需要實現自己想要的方法即可。
代碼實現:
1 /**
2 * 一個和尚應該要做的事情
3 */
4 public interface Bonze {
5 void chiZhai();
6 void nianFo();
7 void daZuo();
8 void saoDi();
9 void xiWu();
10 void zhuangZhong();
11 String getName();
12 }
13
14
15
16 /**
17 * 適配器
18 */
19 public abstract class TianStar implements Bonze {
20 @Override
21 public void chiZhai() {
22
23 }
24
25 @Override
26 public void nianFo() {
27
28 }
29
30 @Override
31 public void daZuo() {
32
33 }
34
35 @Override
36 public void saoDi() {
37
38 }
39
40 @Override
41 public void xiWu() {
42
43 }
44
45 @Override
46 public void zhuangZhong() {
47
48 }
49
50 @Override
51 public String getName() {
52 return null;
53 }
54 }
55
56
57
58 /**
59 * 目標角色
60 */
61 public class LuZhiShen extends TianStar {
62 @Override
63 public void xiWu() {
64 System.out.println("" +
65 " 拳打鎮關西;\n" +
66 " 大鬧五臺山;\n" +
67 " 大鬧桃花村;\n" +
68 " 火燒瓦官寺;\n" +
69 " 倒拔垂楊柳;");
70 }
71
72 @Override
73 public String getName() {
74 return "魯智深在此";
75 }
76 }
77
78
79 @RunWith(SpringRunner.class)
80 @SpringBootTest
81 public class LuZhiShenTest {
82
83 @Test
84 public void test()throws Exception{
85 Bonze bonze = new LuZhiShen();
86 bonze.xiWu();
87 System.out.println(bonze.getName());
88 }
89 }
90
91 /*
92 * 拳打鎮關西;
93 * 大鬧五臺山;
94 * 大鬧桃花村;
95 * 火燒瓦官寺;
96 * 倒拔垂楊柳;
97 *魯智深在此
98 */
希望與廣大網友互動??
點此進行留言吧!
總結
以上是生活随笔為你收集整理的adapter pattern java_适配器模式(Adapter Pattern)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 一年 周数_在java,如何找
- 下一篇: java如何配置环境_java如何配置环