Singleton- ja Factory Method -mallit
Toteuttakaa Singleton-malli yksilöllisiä ilmentymiä varten ja Factory Method joustavaan olioiden luontiin.
Singleton- ja Factory Method -mallit on ilmainen Clean Architecture ja suunnittelumallit käytännössä-oppitunti CoddyKitissä. Tämä on oppitunti 1/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Clean Architecture ja suunnittelumallit käytännössä-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Clean Architecture ja suunnittelumallit käytännössä-kurssilla on yhteensä 4 oppituntia.
Johdatus luontimalleihin
Tervetuloa luontimalleja käsittelevälle oppitunnille! Näissä malleissa on kyse olioiden luomisesta.
Ne auttavat hallitsemaan olioiden ilmentämistä tavalla, joka tekee järjestelmistämme joustavampia ja vankempia. Sen sijaan että loisimme olioita suoraan kaikkialla, käytämme malleja tämän prosessin hallintaan.
Singleton: vain yksi ilmentymä
Singleton-malli varmistaa, että luokasta on vain yksi ilmentymä, ja tarjoaa tähän ilmentymään maailmanlaajuisen käyttöoikeuden.
- Se soveltuu resursseille, joiden tulee olla ainutkertaisia, kuten asetusten hallinnalle tai lokikirjoittimelle.
- Toteutuksessa luokalla on yleensä yksityinen konstruktori ja staattinen metodi, joka palauttaa ainoan ilmentymän.
Yksinkertaisen Singletonin rakentaminen
Tässä on yksinkertainen esimerkki Singletonista. Huomatkaa private-konstruktori ja static getInstance()-metodi.
getInstance()-metodi tarkistaa, onko ilmentymä jo olemassa. Jos sitä ei ole, metodi luo sellaisen. Muussa tapauksessa se palauttaa olemassa olevan ilmentymän.
public class SimpleLogger {
private static SimpleLogger instance;
// Private constructor to prevent direct instantiation
private SimpleLogger() {
System.out.println("SimpleLogger instance created!");
}
public static SimpleLogger getInstance() {
if (instance == null) {
instance = new SimpleLogger();
}
return instance;
}
public void log(String message) {
System.out.println("LOG: " + message);
}
}
public class Main {
public static void main(String[] args) {
SimpleLogger logger1 = SimpleLogger.getInstance();
logger1.log("Application starting up.");
SimpleLogger logger2 = SimpleLogger.getInstance();
logger2.log("Processing user request.");
if (logger1 == logger2) {
System.out.println("Both logger references point to the same instance!");
}
}
}Singleton: säieturvallinen käyttö
Yksinkertaisessa Singletonissa voi olla ongelmia monisäikeisissä ympäristöissä. Jos useat säikeet kutsuvat getInstance()-metodia samanaikaisesti, kun instance on null, ilmentymiä voi syntyä useampi kuin yksi.
Voimme tehdä toteutuksesta säieturvallisen käyttämällä synchronized-avainsanaa getInstance()-metodissa. Näin varmistetaan, että vain yksi säie voi suorittaa metodin kerrallaan.
public class ThreadSafeLogger {
private static ThreadSafeLogger instance;
private ThreadSafeLogger() {
System.out.println("ThreadSafeLogger instance created!");
}
public static synchronized ThreadSafeLogger getInstance() {
if (instance == null) {
instance = new ThreadSafeLogger();
}
return instance;
}
public void log(String message) {
System.out.println("TS_LOG: " + message);
}
}
public class Main {
public static void main(String[] args) {
// In a real app, threads would access this concurrently.
// Here, we just show it works correctly sequentially.
ThreadSafeLogger tsLogger1 = ThreadSafeLogger.getInstance();
tsLogger1.log("Task A completed.");
ThreadSafeLogger tsLogger2 = ThreadSafeLogger.getInstance();
tsLogger2.log("Task B started.");
if (tsLogger1 == tsLogger2) {
System.out.println("Thread-safe instances are the same!");
}
}
}Singletonin käyttötapaukset
Milloin Singleton-mallin käyttöä kannattaa harkita?
- Asetusten hallinta: sovelluksen asetusten säilyttämiseen ja sen varmistamiseen, että sovelluksen kaikki osat käyttävät samoja asetuksia.
- Lokikirjoitin: yhden lokipalvelun käyttämiseen sovelluksen tapahtumien kirjoittamiseen.
- Tietokantayhteyksien pooli: rajallisen tietokantayhteysjoukon tehokkaaseen hallintaan koko sovelluksessa.
Ongelma: kovakoodattu luonti
Tarkastellaan seuraavaksi Factory Method -mallia. Kuvitelkaa, että koodinne luo olioita suoraan, esimerkiksi new Car() tai new Truck().
Mitä tapahtuu, jos teidän on lisättävä uusi ajoneuvotyyppi tai muutettava Car-olion luontitapaa? Teidän olisi etsittävä ja päivitettävä koodistanne jokainen kohta, jossa näitä olioita luodaan. Tämä tekee koodista jäykkää ja vaikeasti ylläpidettävää!
Factory Method: luonnin abstrahointi
Factory Method -malli ratkaisee tämän määrittelemällä olion luomista varten rajapinnan tai abstraktin luokan, mutta antamalla aliluokkien päättää, mikä luokka ilmennetään.
- Se siirtää olioiden luonnin erityisiin "factory"-metodeihin.
- Tämä edistää löyhää kytkentää, koska asiakaskoodi voi toimia rajapintojen eikä konkreettisten luokkien kanssa.
Rakentaminen Factory Method -mallilla
Luodaan järjestelmä erityyppisiä kuljetuksia varten. Määrittelemme Transport-rajapinnan ja konkreettiset kuljetusluokat sekä TransportFactory-luokan, jossa on factory-metodi.
Kukin erityinen factory, esimerkiksi CarFactory, tietää, miten oma tuotteensa luodaan.
// Product Interface
interface Transport {
void deliver();
}
// Concrete Products
class Truck implements Transport {
@Override
public void deliver() {
System.out.println("Deliver by land in a truck.");
}
}
class Ship implements Transport {
@Override
public void deliver() {
System.out.println("Deliver by sea in a ship.");
}
}
// Creator Interface (with Factory Method)
abstract class Logistics {
public void planDelivery() {
Transport t = createTransport();
t.deliver();
}
// The Factory Method
public abstract Transport createTransport();
}
// Concrete Creators
class RoadLogistics extends Logistics {
@Override
public Transport createTransport() {
return new Truck();
}
}
class SeaLogistics extends Logistics {
@Override
public Transport createTransport() {
return new Ship();
}
}
public class Main {
public static void main(String[] args) {
Logistics roadLogistics = new RoadLogistics();
roadLogistics.planDelivery(); // Outputs: Deliver by land in a truck.
Logistics seaLogistics = new SeaLogistics();
seaLogistics.planDelivery(); // Outputs: Deliver by sea in a ship.
}
}Factory Method -mallin edut
Factory Method -malli tuo ohjelmiston suunnitteluun useita keskeisiä hyötyjä:
- Löyhä kytkentä: asiakaskoodinne käyttää vain
Logistics-rajapintaa, ei suoraanTruck- taiShip-luokkia. - Laajennettavuus: voitte lisätä helposti uusia kuljetustyyppejä, kuten
AirLogistics-luokan jaPlane-olion, muuttamatta olemassa olevaaLogistics- tai asiakaskoodia. - Yhden vastuun periaate: olioiden luomisesta vastaaminen siirretään erillisille factory-luokille ja -metodeille.
Testaa tietosi
Testataan, miten hyvin ymmärrätte Singleton- ja Factory Method -mallit.
Kertaus: Singleton ja Factory
Hienosti tehty! Tässä oppitunnissa tutustuimme kahteen tehokkaaseen luontimalliin:
- Singleton: varmistaa, että luokasta on vain yksi ilmentymä, ja tarjoaa maailmanlaajuisen käyttöoikeuden siihen. Muistakaa huomioida säieturvallisuus!
- Factory Method: siirtää olioiden luonnin aliluokille, edistää löyhää kytkentää ja tekee koodista helpommin laajennettavaa.
Nämä mallit ovat joustavien ja helposti ylläpidettävien ohjelmistojen rakentamisen perusta. Seuraavaksi tutustumme muihin luontimalleihin, kuten Abstract Factory- ja Builder-malleihin!
Opi Clean Architecture ja suunnittelumallit käytännössä tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 12
- Oppitunnit
- 48
Usein kysytyt kysymykset
Onko oppitunti ”Singleton- ja Factory Method -mallit” ilmainen?
Kyllä – oppitunnin ”Singleton- ja Factory Method -mallit” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Clean Architecture ja suunnittelumallit käytännössä-kurssin, päivitä CoddyKit PROhon. Clean Architecture ja suunnittelumallit käytännössä-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Singleton- ja Factory Method -mallit”?
Toteuttakaa Singleton-malli yksilöllisiä ilmentymiä varten ja Factory Method joustavaan olioiden luontiin. Harjoittelet Clean Architecture ja suunnittelumallit käytännössä-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Clean Architecture ja suunnittelumallit käytännössä-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Clean Architecture ja suunnittelumallit käytännössä-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.
Kuinka kauan ”Singleton- ja Factory Method -mallit”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Clean Architecture ja suunnittelumallit käytännössä-oppitunnilla?
Kyllä. Jokainen Clean Architecture ja suunnittelumallit käytännössä-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Singleton- ja Factory Method -mallit
- Abstract Factory- ja Builder-mallit
- Prototype- ja Object Pool -mallit
- Riippuvuuksien injektointi luontitekniikkana