Hello! Dina iki kita bakal ndemek topik anyar sing penting - pola, utawa kanthi tembung liyane - pola desain . Apa pola? Aku mikir sampeyan ngerti ungkapan "aja reinvent setir." Ing program, kaya ing akeh wilayah liyane, ana akeh kahanan khas. Kanggo saben wong, ing proses pangembangan program, solusi kerja sing wis siap digawe. Iki minangka pola desain. Sacara relatif, pola minangka conto tartamtu sing menehi solusi kanggo kahanan kaya: "yen program sampeyan kudu nindakake, kepiye cara sing paling apik." Ana akeh pola, buku sing apik banget "Sinau Pola Desain" khusus kanggo wong-wong mau, sing kudu diwaca. Kanggo nyelehake kanthi sedhela, pola kasebut kalebu masalah umum lan solusi, sing bisa dianggep minangka standar. Ing kuliah dina iki kita bakal kenal karo salah sawijining pola sing diarani "Adaptor". Jenenge ngandhani, lan sampeyan wis nemokake adaptor ing urip nyata luwih saka sepisan. Salah sijine adaptor sing paling umum yaiku pembaca kertu, sing dilengkapi akeh komputer lan laptop. Mbayangno sing kita duwe sawetara jinis kertu memori. Apa masalahe? Kasunyatane dheweke ora ngerti carane sesambungan karo komputer. Dheweke ora duwe antarmuka umum. Komputer wis konektor USB, nanging sampeyan ora bisa masang kertu memori menyang. Kertu kasebut ora bisa dilebokake ing komputer, amarga kita ora bisa nyimpen foto, video lan data liyane. Pembaca kertu minangka adaptor sing bisa ngatasi masalah iki. Sawise kabeh, wis kabel USB! Ora kaya kertu dhewe, maca kertu bisa dilebokake ing komputer. Padha duwe antarmuka umum karo komputer - USB. Ayo ndeleng apa sing bakal katon karo conto:
public interface USB {
void connectWithUsbCable();
}
Iki antarmuka USB kita kanthi cara mung kanggo masang kabel USB:
public class MemoryCard {
public void insert() {
System.out.println("Карта памяти успешно вставлена!");
}
public void copyData() {
System.out.println("Данные скопированы на компьютер!");
}
}
Iki kelas kita sing ngleksanakake peta memori. Wis 2 cara kita kudu, nanging iki masalah: ora ngleksanakake antarmuka USB. Kertu ora bisa dilebokake menyang slot USB.
public class CardReader implements USB {
private MemoryCard memoryCard;
public CardReader(MemoryCard memoryCard) {
this.memoryCard = memoryCard;
}
@Override
public void connectWithUsbCable() {
this.memoryCard.insert();
this.memoryCard.copyData();
}
}
Lan iki adaptor kita! Apa kelasCardReader
apa lan apa iku adaptor? Iku prasaja. Kelas sing diadaptasi (peta memori) dadi salah sawijining lapangan adaptor. Iki logis, amarga ing urip nyata kita uga masang kertu ing maca kertu, lan uga dadi bagéan saka iku. Ora kaya kertu memori, adaptor nduweni antarmuka umum karo komputer. Wis kabel USB, tegese bisa nyambung menyang piranti liyane liwat USB. Mulane, ing program, kelas kita CardReader
nindakake antarmuka USB. Nanging apa sing kedadeyan ing metode iki? Lan ana kedadeyan persis apa sing kita butuhake! Adaptor delegasi karya menyang kertu memori kita. Sawise kabeh, adaptor dhewe ora nindakake apa-apa, maca kertu ora duwe fungsi independen. Tugase mung nyambungake komputer lan kertu memori supaya kertu bisa nindakake tugas lan nyalin file! Adaptor kita ngidini nindakake iki kanthi nyedhiyakake antarmuka (metode connectWithUsbCable()
) dhewe kanggo "kabutuhan" kertu memori. Ayo nggawe sawetara program klien sing bakal simulasi wong sing pengin nyalin data saka kertu memori:
public class Main {
public static void main(String[] args) {
USB cardReader = new CardReader(new MemoryCard());
cardReader.connectWithUsbCable();
}
}
Apa sing kita entuk minangka asil? Output konsol:
Карта памяти успешно вставлена!
Данные скопированы на компьютер!
Apik, tugas kita wis rampung kanthi sukses! Ing ngisor iki sawetara pranala tambahan kanthi informasi babagan pola Adaptor:
- Pola Adaptor Video – Pola Desain ;
- Pola desain "Adaptor" / "Adaptor" ;
- Desain pola ing basa prasaja .
Kelas Abstrak Reader lan Writer
Saiki kita bakal bali menyang pastime favorit: kita bakal sinau saperangan saka kelas anyar kanggo nggarap input lan output :) Carane akeh wong wis kita wis sinau, Aku wonder? Dina iki kita bakal ngomong babagan kelasReader
lan Writer
. Apa bab wong-wong mau? Amarga iki bakal ana gandhengane karo bagean sadurunge - adaptor. Ayo padha ndeleng ing liyane rinci. Ayo miwiti karo Reader
'a. Reader
minangka kelas abstrak, mula kita ora bakal bisa nggawe obyek kasebut kanthi jelas. Nanging nyatane sampeyan wis ngerti dheweke! Sawise kabeh, kelas sing sampeyan kenal BufferedReader
yaiku InputStreamReader
ahli waris :)
public class BufferedReader extends Reader {
…
}
public class InputStreamReader extends Reader {
…
}
Dadi, kelas InputStreamReader
minangka adaptor klasik . Sampeyan bisa uga elinga, kita bisa ngirim obyek menyang konstruktor InputStream
. Paling asring kita nggunakake variabel kanggo iki System.in
:
public static void main(String[] args) {
InputStreamReader inputStreamReader = new InputStreamReader(System.in);
}
Apa sing ditindakake InputStreamReader
? Kaya adaptor, ngowahi siji antarmuka menyang liyane. Ing kasus iki, antarmuka InputStream
'a kanggo antarmuka Reader
' a. Awale kita sekelas InputStream
. Kerjane apik, nanging mung bisa maca bait individu. Kajaba iku, kita duwe kelas abstrak Reader
. Nduwe fungsi sing apik banget sing kita butuhake - bisa maca karakter! Kita, mesthi, butuh kesempatan iki. Nanging ing kene kita ngadhepi masalah klasik sing biasane diatasi dening adaptor - ora kompatibel karo antarmuka. Kepriye wujude? Ayo ndeleng langsung menyang dokumentasi Oracle. Punika cara kelas InputStream
. Sakumpulan metode yaiku antarmuka. Nalika sampeyan bisa ndeleng, read()
kelas iki nduweni cara (malah ing sawetara versi), nanging mung bisa maca bita: bait individu, utawa sawetara bait nggunakake buffer. Opsi iki ora cocog karo kita - kita pengin maca karakter. Fungsi sing kita butuhake wis ditindakake ing kelas abstrakReader
. Iki uga bisa dideleng ing dokumentasi. Nanging, antarmuka InputStream
'a' lan Reader
'a' ora kompatibel! Kaya sing sampeyan ngerteni, ing kabeh implementasi metode, read()
paramèter sing dilewati lan nilai bali beda-beda. Lan ing kene kita butuh InputStreamReader
! Dheweke bakal tumindak minangka Adaptor antarane kelas kita. Kaya ing conto karo maca kertu, sing kita deleng ing ndhuwur, kita ngliwati obyek kelas "dicocogake" "internal", yaiku, menyang konstruktor kelas adaptor. Ing conto sadurunge, kita ngliwati obyek MemoryCard
ing njero CardReader
. Saiki kita ngirim obyek InputStream
menyang konstruktor InputStreamReader
! Minangka kualitas, InputStream
kita nggunakake variabel sing wis dikenal System.in
:
public static void main(String[] args) {
InputStreamReader inputStreamReader = new InputStreamReader(System.in);
}
Lan pancen: kanthi ndeleng dokumentasi, InputStreamReader
kita bakal weruh yen "adaptasi" sukses :) Saiki kita duwe metode pembuangan sing ngidini kita maca karakter. Lan sanajan ing wiwitan obyek kita System.in
(utas sing kaiket ing keyboard) ora ngidini, kanthi nggawe pola Adaptor , para pangripta basa ngrampungake masalah iki. Kelas abstrak Reader
, kaya umume kelas I/O, duwe sedulur kembar - Writer
. Nduwe kauntungan gedhe sing padha Reader
- nyedhiyakake antarmuka sing trep kanggo nggarap simbol. Kanthi aliran output, masalah lan solusi katon padha karo aliran input. Ana kelas OutputStream
sing mung bisa nulis bita; Ana kelas abstrak Writer
sing bisa digunakake karo simbol, lan ana loro antarmuka sing ora kompatibel. Masalah iki maneh kasil ditanggulangi dening pola Adaptor. Nggunakake kelas, OutputStreamWriter
kita bisa gampang "nyesuekake" loro antarmuka kelas Writer
kanggo OutputStream
saben liyane. Na, sawise nampa stream byte OutputStream
ing konstruktor, kanthi bantuan OutputStreamWriter
kita bisa, Nanging, nulis karakter, ora bita!
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
OutputStreamWriter streamWriter = new OutputStreamWriter(new FileOutputStream("C:\\Users\\Username\\Desktop\\test.txt"));
streamWriter.write(32144);
streamWriter.close();
}
}
Kita nulis karakter kanthi kode 32144 - 綐 menyang file kita, saéngga ngilangi kebutuhan kanggo nggarap bita :) Sing kabeh kanggo dina iki, nganti ketemu ing kuliah sabanjure! :)
GO TO FULL VERSION