Java əsas kitabxanalarında GoF dizayn nümunələrinin nümunələri

Java GoF dizayn nümunələrini öyrənirəm və bəzi real həyat nümunələrini görmək istəyirəm. Əsas Java kitabxanalarında bu dizayn nümunələrinin yaxşı nümunələri hansılardır?

673
04 нояб. set by unj2 04 noyabr. 2009-11-04 16:45 '09 at 16:45 2009-11-04 16:45
@ 7 cavab

Vikipediyada çox sayda dizayn nümunəsi ilə tanış ola bilərsiniz. Həmçinin, şablonların GoF tərəfindən qeyd edildiyini də xatırladır. Onları buraya buraxacağam və Java SE API və Java EE-də mümkün qədər çox şablon tətbiqini tapmağa çalışacağam.


Şablon yaratmaq

Abstract fabrikası (öz növbəsində başqa abstrakt / interfeys yaratmaq üçün istifadə oluna bilən bir fabrikə qayıtmaq üçün yaradılmış üsullarla tanınır)

Builder (nümunənin özünü qaytaran yaradılması metodlarından istifadə edərək) sub>

Fabrika metodu (bir abstrakt / interfeys növü tətbiqini qaytaran yaradılması metodları ilə tanınır)

Prototip (eyni xüsusiyyətləri olan fərqli olanları qaytarmaq üçün yaradılmış üsullarla tanınır)

Singleton (qaynaşma üsulları ilə tanınır (adətən özü) hər dəfə)


Struktur Nümunələri

Adapter (yaradılış metodları ilə fərqlənir, fərqli bir abstrakt / interfeys növünün nümunəsini qəbul edir və nümunəni bəzəyən / yenidən işləyən öz / digər abstrakt / interfeysin tətbiqini qaytarır)

Körpü (yaradılış metodları ilə fərqlənir, fərqli bir abstrakt / interfeys növünün nümunəsini qəbul edir və bu müəllifin / bu məkandan istifadə edən / istifadə edən öz abstraktının tətbiqini qaytarır)

  • Heç kim ağla gəlir. новый LinkedHashMap (LinkedHashSet <K>, List <V>) nümunə elementləri klonlamayan, lakin istifadə etməyən, dəyişkənləşdirilə bilməyən əlaqəli xəritəsi qaytarır, новый LinkedHashMap (LinkedHashSet <K>, List <V>) . java.util.Collections # newSetFromMap()код>singletonXXX() , lakin yaxınlaşır.

Kompozit (davranış metodları ilə tanınan, bir ağac strukturunda eyni abstrakt / interfeys tipinin nümunəsini qəbul edir)

Dekoratör (əlavə davranışı əlavə edən eyni abstrakt / interfeys növü nümunəsini qəbul edən yaradılması metodlarından istifadə edərək tanınır)

Fasad (daxili müstəqil mücərrəd / interfeys növlərinin nümunələrini istifadə edən davranış metodları ilə tanınır)

Flyweight (yaradılış metodları ilə tanınan, önbelleğe alınmış bir formanı qaytarmaq, bit "çoxfunksiya" fikir)

Proxy (öz növbəsində nümayəndələri / bu abstrakt / interfeysin fərqli bir tətbiqini istifadə edən abstrakt tip / interfeys məlumatlarının həyata keçirilməsini təmin edən yaradılması üsulları ilə tanınır)


Davranış nümunələri

Məsuliyyət zənciri (davranış metodları ilə tanınır ki, dolayı yolla eyni üsulu etiketin başqa bir tətbiqində, növbədə eyni abstrakt / interfeys növündə)

Command (bir abstrakt / interfeys növü tətbiqində bir üsul çağırır bir abstrakt / interfeys növü davranış üsulları ilə tanınır , yaradılan zaman komandanın həyata keçirilməsi ilə əhatə olunmuşdur)

Tərcüməçi (bir nümunə / tipin strukturca fərqli nümunəsini / növünü qaytaran davranış metodları ilə tanınır; təhlilin / formatlaşdırmanın nümunəni müəyyən edən modelin bir hissəsi olmadığını və onu necə istifadə edəcəyini qeyd edin)

Iterator (davranış üsulları ilə tanınır, növbədən növbədən başqa növlərin qaytarılması)

Vasitəçi (davranış üsulları ilə fərqlənir, müxtəlif mücərrəd / interfeys nümunəsini alır (adətən bu nümunəni nümayəndələri / istifadə edən bir komanda şablonu istifadə edir)

Memento ( bir tam nümunə vəziyyətini daxili olaraq dəyişən davranış metodları ilə tanınır)

Müşahidəçi (ya da dərc / Subscription) (öz dövlətinə bağlı olaraq başqa bir abstrakt / tipli interfeysin bir nümunəsindəki üsulu çağırdıran davranış üsulları ilə tanınır)

Dövlət (davranış metodları ilə tanınıb ki, davranışını dəyişən nümunənin vəziyyətindən asılı olaraq idarə olunur)

Strateji (bir abstrakt / interfeys növü tətbiqində bir metod çağırır, bir abstrakt / interfeys növü davranış üsulları ilə tanınır strategiyanın həyata keçirilməsində metod mülahizəsi kimi qəbul edilmiş )

şablon metodu (bir abstrakt növü ilə müəyyən edilmiş "default" var ki, davranış üsulları ilə tanınır)

Ziyaretçi (hər bir mücərrəd tipi / em> qəbul edən metodları müəyyən edən iki fərqli abstrakt / interfeys növləri ilə tanınır) bu, həqiqətən, digərinin metodunu çağırır, digəri isə istənilən strategiyanı yerinə yetirir)

2863
25 апр. Cavab BalusC tərəfindən verilir 25 Apr 2010-04-25 07:51 '10 at 07:51 2010-04-25 07:51
  • Bütün dalğalanma zamanı müşahidəçi nümunəsi ( Observable , Observer )
  • MVC də swing edir
  • Adapter Diagramı: InputStreamReader və OutputStreamWriter Qeyd: ContainerAdapter , ComponentAdapter , FocusAdapter , KeyAdapter , MouseAdapter adapterlər deyil; əslində Null obyektlərdir. Günəş üçün pis ad seçimi.
  • Dekoratörün şəkli ( FilterInputStream kimi digər axınları FilterInputStream )
  • AWT Toolkit və Swing kook baxış və hiss sinifləri üçün AbstractFactory Pattern.
  • java.> - Singleton
  • ButtonGroup üçün ButtonGroup
  • Action , AbstractAction eyni kodunu yerinə yetirmək üçün müxtəlif vizual nümayəndəliklər üçün istifadə edilə bilər → Komanda Şablonu
  • Flyweight şablonu üçün JTable-da interned strings və ya CellRender (Həm də müxtəlif hovuzlar barədə fikirləşin - mövzu hovuzları, havuz hovuzları, EJB obyekt hovuzları - Flyweight həqiqətən paylaşılan resursları idarə etmək üçün həsr olunur).
  • Java 1.0 olay modeli məsuliyyət zəncirinin nümunəsidir, həmçinin servlet filtrləri.
  • Toplama strukturunda İterator
  • AWT / Swing iç içə konteynerlər kompozit bir model istifadə edir.
  • AWT / Swing layout menecerləri nümunə strategiyadır
border=0

və bir çoxları düşünürəm

97
04 нояб. Cavab jitter tərəfindən verilir 04 Nov. 2009-11-04 16:51 '09 at 4:51 2009-11-04 16:51
  • Flyweight , Byte, Short, Integer, Long və String bəzi dəyərləri ilə istifadə olunur.
  • Fasad çox yerlərdə istifadə olunur, lakin ən aydın olanlar Scripting interfeysləridir.
  • Singleton - java.>
  • Fabrika xülasəsi də scripting və JDBC API'sidir.
  • Command - Ləğv et / Redo TextComponent.
  • Tərcüməçi RegEx (java.util.regex.) Və SQL (java.sql.) API'sıdır.
  • Prototip bu sayının 100% etibarlı deyil, amma clone() metodu bu məqsəd üçün istifadə oluna bilər.
48
04 нояб. Cavab NawaMan tərəfindən 04 Noyabr. 2009-11-04 17:09 '09 at 05:09 pm 2009-11-04 17:09

RMI proksiyadır.

Bunlardan biri GoF-də ən çox 23 şablon üçün göstərilməlidir:

  • Abstract Factory: java.sql interfeysləri, sürücülərini qeydiyyatdan keçirdikdə, JDBC JAR-dan xüsusi tətbiqlərini əldə edirlər.
  • Builder: java.>
  • Fabrika Metodu: XML bitkiləri, digərləri arasında.
  • Prototip: Bu mümkün klon (), amma satın alacağımdan əmin deyiləm.
  • Singleton: java.>
  • Adapter: java.awt.event, məsələn, WindowAdapter adapter siniflər.
  • Bridge: java.util yığım dərsləri. Siyahı ArrayList tərəfindən həyata keçirilir.
  • Kompozit: java.awt. java.awt.Component + java.awt.Container
  • Dekorativ: bütün java.io paketidir.
  • Fasad: ExternalContext cookie, iclas və oxşar əməliyyatlar yerinə yetirmək üçün bir fasad kimi davranır.
  • Yarım çəki: tamsayı, simvol və s.
  • Proxy: java.rmi paketi
  • Məsuliyyət Zinciri: Servlet Filtreleri
  • Command: Swing menyu elementləri
  • Tərcüməçi: birbaşa JDK-da deyil, JavaCC-də istifadə edir.
  • Iterator: java.util.Iterator interfeysi; bundan daha aydın ola bilməzdi.
  • Mediator: JMS?
  • Memento:
  • Müşahidəçi: java.util.Observer / Gözlənilən (yoxsul olsa da)
  • Vəziyyət:
  • Strategiya:
  • Şablon:
  • Ziyaretçi:

23-dən 10-a qədər Java nümunələrini düşünmürəm, amma sabah daha yaxşı edə biləcəyimi görürəm. Düzəliş etmək üçün lazım olan budur.

40
05 нояб. Cavab duffymo verildi 05 Noyabr. 2009-11-05 05:26 '09 saat 05:26 'da 2009-11-05 05:26

Müxtəlif yerlərdə istifadə edilən Abstract Fabrika şablonu. Məsələn, DatagramSocketImplFactory , PreferencesFactory . Çox daha çox var - onların adına "Fabrika" adı verilən interfeyslər üçün Javadoc axtarışı.

Fabrika modelinin bir çox nümunəsi var.

26
04 нояб. Cavab uckelman tərəfindən verilir 04 Nov. 2009-11-04 16:59 '09 at 16:59 'da 2009-11-04 16:59

Bununla birlikdə broken bir saat kimi olduğumu düşünməməyə baxmayaraq Java XML API'sı Factory'yi çox istifadə edir. Yəni yalnız bunu nəzərdən keçirmək deməkdir:

 Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(source); String title = XPathFactory.newInstance().newXPath().evaluate("//title", doc); 

... və s və s

Bundan əlavə, müxtəlif arabellekler (StringBuffer, ByteBuffer, StringBuilder) Builder istifadə edir.

20
04 нояб. Esko tərəfindən verilmiş cavab 04 Noyabr. 2009-11-04 17:07 '09 at 05:07 PM 2009-11-04 17:07

java.util.Collection # Iterator Fabrika metodunun yaxşı bir nümunəsidir. Kullandığınız Koleksiyonun xüsusi alt sinifindən asılı olaraq, bir İterator tətbiqi yaradır. Həm sinif Factory (toplama) və yaradılan İteratorun superklassi interfeysdir, bəzən AbstractFactory ilə qarışdırılır. AbstractFactory üçün qəbul edilən cavabda (BalusC) nümunələrin əksəriyyəti orijinal GoF şablonlarının bir hissəsi olmayan Fabrika metodunun sadələşdirilmiş versiyası olan Fabrika nümunəsidir. Fasiyədə, zavod sinif iyerarxiyası sıfırlanır və Fabrika qaytarılmış məhsulu seçmək üçün digər vasitələrdən istifadə edir.

  • Abstract Factory

Abstract Factory bir neçə Factory metoduna malikdir, hər biri fərqli bir məhsul yaradır. Fabriklərdən biri tərəfindən yaradılmış məhsulların paylaşılması nəzərdə tutulur (yazıcınız və kartuşlarınız eyni (abstrakt) zavoddan daha yaxşıdır). Yuxarıda göstərilən cavablarda qeyd edildiyi kimi platformadan platformaya fərqlənən AWT komponentlərinin nümunələri bunların nümunəsidir (tətbiqin Qafda təsvir olunan quruluşdan fərqli olmasına baxmayaraq).

20
21 мая '11 в 12:42 2011-05-21 12:42 Cavab Catweazle tərəfindən verilir 21, '11 at 12:42 2011-05-21 12:42