06. oktober 2004 - 18:54Der er
11 kommentarer og 1 løsning
meningen med interface
Hej..
Det er ikke helt klar for mig hvad jeg kan bruge interface mht. klasser? Det er jo ikke et interface i den forstand at andre kan tilgå fx data eller metoder gennem interfacet?
Hvad skal jeg så bruge interface til når jeg programmerer? Hvor er det praktisk anvendeligt, udover ved 'implements ActionListener'?
Håber på I kan hjælpe mig, da det vil sætte min forståelse for Java og programmeringen i et bedre perspektiv..
Pointen er den at du totalt adskiller interfacet fra implementationen.
Du tilføjer en action listener og Swing klasserne ved hvilken metode de kan kalde. De ved intet om hvilken klasse det er fordi de bliver kaldt med 10 millioner forskellige bruger klasser. Men det gør ikke noget fordi de har en kontrakt på hvilken metode de kan stole på er tilstede.
public class FileStore { public FileStore(String filename) { // open file } public save(X x) { // store x to file } }
public class DatabaseStore { public DatabaseStore(String dburl, String usr, String pwd) { // open JDBC connection } public save(X x) { // store x to database } }
så kan du overalt i din kode bruge en Store og kun et eneste sted nemlig ved kald af constructor angive hvilken type Store det er:
Store stor = new FileStore("foobar.dat");
og kalde save metoden overalt i koden (fordi der er en kontrakt på at en sådan metode eksisterer).
Mangler der i ovenstående eksempel ikke at 'kontrakten' underskrives (implements Store).
Men hvad er ideen med at der underskrives en kontrakt, når den klasse der implementerer interfacet selv skal lave funktionaliteten for metoderne. Altså, hvad får den klasse der implementerer udover nogle metoder som den selv skal udbygge..?
public class FileStore implements Store { public FileStore(String filename) { // open file } public save(X x) { // store x to file } }
public class DatabaseStore implements Store { public DatabaseStore(String dburl, String usr, String pwd) { // open JDBC connection } public save(X x) { // store x to database } }
Fordi du så laver 1000 metoder hvor du opererer på Store og når din arkitekt kommer og siger at du skal skifte fra FileStore til DatabaseStore, så retter du fra:
Store stor = new FileStore("foobar.dat");
til:
Store stor = new DatabaseStore("jdbc:xxx:xxx", "xxx", "xxx");
et enkelt sted.
I stedet for at skulle ind og rette fra FileStore til DatabaseStore i 1000 metoder !
Hej Arne, tak for din hjælp, jeg tror det sidste eksempel hjalp mig til at forstå det. Tak for din hjælp.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.