日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

学习:java设计模式—Adapter模式

發(fā)布時(shí)間:2024/8/1 asp.net 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 学习:java设计模式—Adapter模式 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1、核心意圖: 將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另外一個(gè)接口,從而使得原本由于接口不兼容而不能一起工作的類可以一起工作。 該模式的目標(biāo)是通過一個(gè)代理(這里是Adapter),在原來的類(Adaptee)和客戶(Client)之間進(jìn)行協(xié)調(diào),從而達(dá)到兼容的目的。其核心是解決一致性的問題。 2、身邊實(shí)例: 在我們實(shí)際生活中也很容易看到這方面的例子,比如我們要和一個(gè)外國人打交道,例如韓國 人,如果我們沒有學(xué)習(xí)過韓語,這個(gè)韓國人也沒有學(xué)習(xí)過我們漢語,在這種情況下,我們之間是很難進(jìn)行直接交流溝通。為了達(dá)到溝通的目的有兩個(gè)方法:1)改造 這個(gè)韓國人,使其能夠用漢語進(jìn)行溝通;2)請(qǐng)一個(gè)翻譯,在我們和這個(gè)韓國人之間進(jìn)行語言的協(xié)調(diào)。顯然第一種方式——改造這個(gè)韓國人的代價(jià)要高一些,我們不 僅要重新培訓(xùn)他漢語的學(xué)習(xí),還有時(shí)間、態(tài)度等等因素。而第二個(gè)方式——請(qǐng)一個(gè)翻譯,就很好實(shí)現(xiàn),而且成本低,還比較靈活,當(dāng)我們想換個(gè)日本人,再換個(gè)翻譯 就可以了。 3、動(dòng)機(jī)簡(jiǎn)述: 在該模式的動(dòng)機(jī)中,描述了一個(gè)繪圖編輯器的實(shí)現(xiàn),該編輯器可以對(duì)基本圖元Shape(直 線、多邊形、正文等)進(jìn)行繪制和排列來生成圖片和圖表,對(duì)于這些圖元類的實(shí)現(xiàn),直線/多邊形還比較容易實(shí)現(xiàn),但是正文的實(shí)現(xiàn)卻很麻煩,為了減少開發(fā)成本和 保證質(zhì)量,通過采用Adapter模式定義適配器類TextShape,來重用圖形工具箱中已經(jīng)存在的正文編輯器TextView。 4、Java實(shí)現(xiàn)分析: 在GOF設(shè)計(jì)模式中,Adapter可以分為類模式和對(duì)象模式兩種,類模式通過多重繼承實(shí)現(xiàn),對(duì)象模式通過委托實(shí)現(xiàn)。 在Java中由于沒有多重繼承機(jī)制,所以要想實(shí)現(xiàn)類模式的Adapter,就要進(jìn)行相應(yīng) 的改變:通過繼承Adaptee類實(shí)現(xiàn)Target接口方式實(shí)現(xiàn)。這種改變存在兩個(gè)問題:1)Target必須是一個(gè)接口而不能是一個(gè)類,否則Adapter無法implements實(shí)現(xiàn);2)Adapter是繼承Adaptee的實(shí)現(xiàn),而不是私有繼承,這就表示Adapter是一個(gè)Adaptee的子類。 類Adapter模式和對(duì)象Adapter模式的Java代碼可參考本文下方代碼部分。 5、類模式/對(duì)象模式分析: 由于存在兩種Adapter實(shí)現(xiàn)方式(即使在Java中),那么在實(shí)際中我們采用哪一種要好呢?通過分析發(fā)現(xiàn)這兩種模式有兩個(gè)主要特性區(qū)別,并且還是互補(bǔ)的: A、表現(xiàn)在Adapter對(duì)Adaptee的特殊性要求: 類模式由于Adapter是Adaptee的子類,所以Adapter很方便重新定義Adaptee中的個(gè)別方法,以達(dá)到自己的特性需要。 對(duì)象模式由于Adapter不是Adaptee的子類,所以如果Adapter對(duì)Adaptee中的個(gè)別方法有特殊的需要,就要新建Adaptee的子類,而讓Adapter使用這個(gè)子類。 B、表現(xiàn)在Adaptee的類層次擴(kuò)展上: 類模式由于Adapter是Adaptee的子類,所以編譯后就不能再更換所實(shí)現(xiàn)的父類Adaptee,因此如果有一個(gè)Adaptee的類層次結(jié)構(gòu),就要相應(yīng)的有一個(gè)Adapter的類層次結(jié)構(gòu),且新擴(kuò)展Adaptee時(shí)很不方便。 對(duì)象模式由于Adapter不是Adaptee的子類,而是通過使用的方式,所以在系統(tǒng)運(yùn)行時(shí)仍然可以更換Adapter所使用的Adaptee,只要他們具有相同的類型。所以在新擴(kuò)展Adaptee時(shí)很方便。 6、Java代碼示例—對(duì)象模式實(shí)現(xiàn): 類Point,表示畫面坐標(biāo)中的點(diǎn) package qinysong.pattern.adapter;

public class Point {
?
private int coordinateX;
?
private int coordinateY;

?
public Point(int coordinateX, int coordinateY){
???
this.coordinateX = coordinateX;
???
this.coordinateY = coordinateY;
? }

?
public String toString(){
???
return "Point[x=" + coordinateX + ",y=" + coordinateY + "]";
? }

?
public int getCoordinateX() {
???
return coordinateX;
? }

?
public int getCoordinateY() {
???
return coordinateY;
? }

}

類Shape,表示圖元借口,對(duì)應(yīng)Adapter模式中的Target package qinysong.pattern.adapter;

public interface Shape {
?
public Point getBottomLeftPoint();
?
public Point getTopRightPoint();
}

類TextView,工具箱中的文本組件類,已經(jīng)存在的類,對(duì)應(yīng)Adapter模式中的Adaptee package qinysong.pattern.adapter;

public class TextView {

?
public int getCoordinateX() {
??? System.out.println(
"TextView.getCoordinateX()...");
???
return 10;
? }

?
public int getCoordinateY() {
??? System.out.println(
"TextView.getCoordinateY()...");
???
return 20;
? }

?
public int getHeight() {
??? System.out.println(
"TextView.getHeight()...");
???
return 30;
? }

?
public int getWidth() {
??? System.out.println(
"TextView.getWidth()...");
???
return 40;
? }

?
public boolean isEmpty(){
???
return false;
? }

}

類TextShape,對(duì)象模式實(shí)現(xiàn)的Adapter package qinysong.pattern.adapter;

public class TextShape implements Shape {
?
private TextView textView;

?
public TextShape(TextView textView){
???
this.textView = textView;
? }


?
//通過TextView的實(shí)例進(jìn)行協(xié)調(diào)實(shí)現(xiàn)
? public Point getBottomLeftPoint() {
??? System.out.println(
"TextShape.getBottomLeftPoint()...");
???
int coordinateX = textView.getCoordinateX();
???
int coordinateY = textView.getCoordinateY();
???
return new Point(coordinateX, coordinateY);
? }


?
//通過TextView的實(shí)例進(jìn)行協(xié)調(diào)實(shí)現(xiàn)
? public Point getTopRightPoint() {
??? System.out.println(
"TextShape.getTopRightPoint()...");
???
int coordinateX = textView.getCoordinateX();
???
int coordinateY = textView.getCoordinateY();
???
int height = textView.getHeight();
???
int width = textView.getWidth();
???
return new Point(coordinateX + width, coordinateY + height);
? }

}

類Client,Adapter模式的客戶 package qinysong.pattern.adapter;

public class Client {
?
public static void main(String[] args){
??? System.out.println(
"Client.main begin ..........");
??? System.out.println(
"Client.main 以下是通過實(shí)例委托方式實(shí)現(xiàn)的Adapter");
??? Shape shape
= new TextShape(new TextView());
??? Point bottomLeft
= shape.getBottomLeftPoint();
??? Point topRight
= shape.getTopRightPoint();
??? System.out.println(
"Client.main shape's bottomLeft:" + bottomLeft);
??? System.out.println(
"Client.main shape's topRight:" + topRight);

??? System.out.println(
" Client.main 以下是通過類繼承方式實(shí)現(xiàn)的Adapter");
??? Shape shape2
= new TextShape2();
??? bottomLeft
= shape2.getBottomLeftPoint();
??? topRight
= shape2.getTopRightPoint();
??? System.out.println(
"Client.main shape2's bottomLeft:" + bottomLeft);
??? System.out.println(
"Client.main shape2's topRight:" + topRight);
??? System.out.println(
"Client.main end?? ..........");
? }

}

7、Java代碼示例—類模式實(shí)現(xiàn): 和以上對(duì)象模式實(shí)現(xiàn)中的示例目的相同,類Point、Shape、TextView相同,略。以下是類TextShape2的示例代碼,實(shí)現(xiàn)類模式的Adapter package qinysong.pattern.adapter;

public class TextShape2 extends TextView implements Shape {

?
//通過所繼承的TextView,進(jìn)行協(xié)調(diào)實(shí)現(xiàn)
? public Point getBottomLeftPoint() {
??? System.out.println(
"TextShape2.getBottomLeftPoint()...");
???
int coordinateX = getCoordinateX();
???
int coordinateY = getCoordinateY();
???
return new Point(coordinateX, coordinateY);
? }


?
//通過所繼承的TextView,進(jìn)行協(xié)調(diào)實(shí)現(xiàn)
? public Point getTopRightPoint() {
??? System.out.println(
"TextShape2.getTopRightPoint()...");
???
int coordinateX = getCoordinateX();
???
int coordinateY = getCoordinateY();
???
int height = getHeight();
???
int width = getWidth();
???
return new Point(coordinateX + width, coordinateY + height);
? }


?
//注意: 這一點(diǎn)體現(xiàn)了類模式的優(yōu)勢(shì),可以很方便地重定義父類TextView中的方法
? public int getCoordinateX() {
??? System.out.println(
"TextShape2.getCoordinateX()...");
???
return 100;
? }

}

總結(jié)

以上是生活随笔為你收集整理的学习:java设计模式—Adapter模式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 三级在线观看 | 91成人在线观看喷潮动漫 | 草久在线 | 欧美高清精品一区二区 | 国产极品免费 | 久久久亚洲av波多野结衣 | 亚洲天堂一区在线观看 | 伊伊成人网 | 亚洲欧美日韩一区在线观看 | 国产精品一区一区三区 | 超碰人人人人人人 | av电影在线播放 | 在线综合色| 91久久久久 | 久久久精品小视频 | 成年人网站免费视频 | 97人妻精品一区二区三区免费 | 中国二级毛片 | 国产高清在线观看视频 | 强伦人妻一区二区三区视频18 | 岳狂躁岳丰满少妇大叫 | 欧美精品一区二区免费看 | 国产精品911 | 亚洲视频一区二区三区四区 | 男人插入女人下面的视频 | 国精产品一品二品国精品69xx | 中文无码精品一区二区三区 | 91插插视频 | 欧美韩国日本在线 | 欧美在线视频观看 | 摸摸摸bbb毛毛毛片 午夜爽爽影院 | 日韩精品视频在线看 | 免费看的黄色网 | av十大美巨乳 | 狠狠干超碰 | h亚洲 | 污污在线免费观看 | 少妇系列在线观看 | 福利在线一区 | 91精品免费 | 色黄视频 | 国产一区二区在线观看视频 | 一本大道久久久久精品嫩草 | 欧美一区2区 | 国产婷婷在线观看 | 亚洲国产精品成人综合色在线婷婷 | 欧美一区二区三区公司 | 开心激情综合 | 日韩欧美国产视频 | 动漫精品一区一码二码三码四码 | 钰慧的mv视频在线观看 | 午夜视频福利网站 | 免费裸体视频网站 | 日韩簧片在线观看 | 桃色一区 | 人碰人操 | 亚洲一二三四视频 | 欧美一区二区二区 | 亚洲精品天堂成人片av在线播放 | 天天插天天爱 | 色视频在线观看免费 | 欧美xxxxx少妇 | 善良的公与媳hd中文字 | 性高潮免费视频 | 日韩国产精品一区二区三区 | 懂色av成人一区二区三区 | 欧美bbbbb性bbbbb视频 | 91精品国产91久久久久久黑人 | 国产欧美一区二区三区精品酒店 | 色婷婷av一区二区三区麻豆综合 | 91精品人妻一区二区三区蜜桃欧美 | aaa在线 | 青娱乐av| 欧美a视频 | 久久精品久久久久 | 凹凸福利视频 | 成人777 | 久久精品tv | 国产精品国语 | 激情免费网站 | 污视频网站在线播放 | 日韩性欧美 | 国产3p精品一区 | 国产毛片aaa| 超碰2| 日日爽夜夜 | 欧美日韩在线视频一区二区 | 无码粉嫩虎白一线天在线观看 | 色综合天天综合网天天看片 | 久久久久婷婷 | 亚洲AV第二区国产精品 | 日韩成年人视频 | 成人在线免费观看视频 | 色爽视频 | 奇米色在线 | 天天综合色 | 国语播放老妇呻吟对白 | 欧美性猛交xxx乱大交3蜜桃 | 国产a级淫片 |