Агуулгын хүснэгт:

Синглтон дизайны загварыг C ++ дээр хэрхэн хийх вэ: 9 алхам
Синглтон дизайны загварыг C ++ дээр хэрхэн хийх вэ: 9 алхам

Видео: Синглтон дизайны загварыг C ++ дээр хэрхэн хийх вэ: 9 алхам

Видео: Синглтон дизайны загварыг C ++ дээр хэрхэн хийх вэ: 9 алхам
Видео: Refactoring: Singleton [Дизайн загварууд] 2024, Оны зургадугаар сарын
Anonim
Синглтон дизайны загварыг C ++ дээр хэрхэн хийх вэ
Синглтон дизайны загварыг C ++ дээр хэрхэн хийх вэ

Танилцуулга:

Энэхүү зааварчилгааны гарын авлагын зорилго нь хэрэглэгчдэд C ++ програм дээр синглтон загварыг хэрхэн хэрэгжүүлэх талаар заах явдал юм. Ингэхдээ энэхүү зааварчилгааны багц нь уншигчдад синглтон элементүүд яагаад ийм байдаг, кодыг хэрхэн боловсруулдаг болохыг тайлбарлах болно. Үүнийг мэдэж байх нь ирээдүйд ганцаарчилсан дуунуудаа дибаг хийхэд туслах болно. Синглтон загварын загвар гэж юу вэ? Синглтон дизайны загвар нь кодлогч нь зөвхөн нэг л удаа үүсгэгддэг ангиудыг бий болгодог дизайны загвар бөгөөд хэрэв та төслийн бусад файлд толгой файлыг оруулсан бол ангиудын нийтийн функцэд үндсэндээ хаанаас ч хандаж болно.

Синглтон дизайны загвар нь аливаа объектод чиглэсэн програмист, програм хангамж, тоглоомын програмистуудын дизайны загварыг мэддэг байх ёстой. Синглтон дизайны загвар нь кодлох дизайны хамгийн хялбар загваруудын нэг юм. Үүнийг сурснаар ирээдүйд өөр, илүү хэцүү, дизайны загварыг сурахад тусална. Энэ нь програмынхаа кодыг таны бодож байгаагүй байдлаар хялбаршуулахад тусална.

Синглтон дизайны хэв маягийн хүндрэл нь бусад дизайны загвартай харьцуулахад хялбар боловч энэ зааврын багц нь дунд зэргийн бэрхшээлтэй байдаг. Энэ нь эдгээр зааврыг хийхийн тулд C ++ синтаксийн үндсэн болон урьдчилсан шаардлагуудыг мэдэхийг танд зөвлөж байна гэсэн үг юм. Та мөн C ++ кодлох зохих ёс зүйг мэддэг байх ёстой (өөрөөр хэлбэл ангийн хувьсагчдыг хувийн байлгах, толгой файл бүрт нэг анги гэх мэт). Та санах ойг хэрхэн чөлөөлөх, C ++ дээр бүтээгч, устгагч хэрхэн ажилладаг талаар мэдэх ёстой.

Энэхүү гарын авлага нь дунджаар 10-15 минут болно.

Материалын шаардлага:

-Visual Studios (ямар ч хувилбар) ажиллуулах чадвартай компьютер (PC эсвэл Mac байж болно)

-Visual студид бүтээгдсэн энгийн програм бөгөөд та ганц бие дуугаа туршиж үзэх боломжтой

Тэмдэглэл: Синглтон дизайны загварыг IDE эсвэл кодчилох интерфейсийг дэмждэг бусад C ++ дээр хийж болно, гэхдээ энэ зааврын хувьд бид Visual Studios Enterprise Edition -ийг ашиглах болно.

Алхам 1: Толгой файл болон CPP файл ашиглан ангиа үүсгээрэй

Толгой файл болон CPP файл ашиглан ангиа үүсгээрэй
Толгой файл болон CPP файл ашиглан ангиа үүсгээрэй
Толгой файл болон CPP файл ашиглан ангиа үүсгээрэй
Толгой файл болон CPP файл ашиглан ангиа үүсгээрэй

Эдгээр хоёр файл болон ангийг нэг дор үүсгэхийн тулд Visual Studios дээр төсөл / програмаа нээгээд, шийдэл хайгч руу очоод хулганы баруун товчийг дараад "Нэмэх" гэсэн сонголтыг олоод, хулганы заагчийг дарна уу. Үүний дээр баруун талд өөр хайрцаг гарч ирэх ёстой. Энэ хайрцагт та "Шинэ зүйл.." гэсэн сонголтыг олохыг хүсч байгаа бөгөөд үүнийг дарж доорх 1.1 зурагтай төстэй цонх гарч ирнэ. Энэ цонхонд та "C ++ Class" -ийг сонгоод "Нэмэх" дээр дарна уу. Энэ нь 1.2 зурагтай төстэй цонхыг нээх болно. Энэ цонхонд та "Ангийн нэр" талбарт ангийнхаа нэрийг бичээд Visual Studio нь тухайн файлын нэрийг автоматаар нэрлэх болно. Энэхүү зааварчилгааны үүднээс бид ангиа "EngineDebugSingleton" гэж нэрлэх гэж байгаа боловч үсэг дээр үндэслэсэн нэр байж болно. Та одоо "OK" дээр дарж 2 -р алхам руу шилжиж болно.

Тэмдэглэл: Шийдэл хайгч ба файлууд таны компьютер дээр хаана хадгалагдаж байгаа нь тусдаа байна. Шийдэл хайгч дээр юу ч зөөх эсвэл үүсгэх нь таны OS файл хайгч доторх файлуудыг зөөхгүй, цэгцлэхгүй. Файл хайгч талд файлуудаа цэгцлэх аюулгүй арга бол устгагдсан байх болно, гэхдээ тодорхой файлуудыг шийдэл хайгчнаас устгахгүй, файл хайгч дээрх ижил файлуудыг хүссэн байрлал руу зөөж, дараа нь шийдэл хайгч руу буцаж очоод хулганы баруун товчийг дарна уу. "Нэмэх" сонголтыг, дараа нь "Байгаа зүйл" -ийг олж, зөөсөн файлуудаа олоорой. Толгой болон cpp файлыг хоёуланг нь зөөж байгаа эсэхийг шалгаарай.

Алхам 2: Конструкторыг хувийн болгож тохируулна уу

Бүтээгчийг хувийн болгож тохируулна уу
Бүтээгчийг хувийн болгож тохируулна уу

Шинээр үүсгэсэн CPP файл болон толгой файлын тусламжтайгаар хэрэв та үүнийг үүсгэх үед автоматаар нээгдээгүй бол шийдэл хайгч руу очоод "EngineDebugSingleton.h" -ийг нээнэ үү. Дараа нь таныг "EngineDebugSingleton ()", ангийн анхдагч байгуулагч, "~ EngineDebugSingleton ()" ангийн устгагчтай угтах болно. Энэ алхамыг хийхийн тулд бид бүтээгчийг хувийн болгож тохируулахыг хүсэх болно, энэ нь энэ функцийг зөвхөн ангид ашиглах боломжтой бөгөөд өөр юу ч биш гэсэн үг юм. Үүний тусламжтайгаар та хувьсагч хийх эсвэл ангиас гадуурх санах ойд хуваарилах боломжгүй болно, зөвхөн ангийн толгой файл болон ангиудын бусад функц дээр. Хувийн зохион байгуулагчтай байх нь дизайны хэв маяг, ганц бие хүмүүс хэрхэн ажиллах гол түлхүүр юм. Синглтон хэрхэн бүтээгдэж, түүнд хэрхэн хандаж байгааг бид дараагийн алхамуудад олж мэдэх болно.

Конструкторыг хувийн болгосны дараа анги иймэрхүү харагдах ёстой (холбогдох зургийг харна уу)

Алхам 3: Устгагчийг хувийн болгож тохируулна уу

Устгагчийг хувийн болгож тохируулна уу
Устгагчийг хувийн болгож тохируулна уу

Бид конструктортой хийсэн шиг

2 -р алхам, энэ алхамыг хийхийн тулд бид одоо устгагчийг хувийн болгох болно. Бүтээгчийн нэгэн адил ангиас өөр юу ч санах ойгоос ангийн хувьсагчдыг устгах боломжгүй болно.

Энэ алхамыг хийсний дараа анги иймэрхүү харагдах ёстой. (Холбогдох зургийг үзнэ үү)

Алхам 4: Синглтон дээр статик заагчийн хувьсагч үүсгэх

Синглтон дээр статик заагчийн хувьсагч үүсгэх
Синглтон дээр статик заагчийн хувьсагч үүсгэх

Энэ алхамд бид a үүсгэх болно

"EngineDebugSingleton*" төрлийн статик заагчийн хувьсагч. Энэ бол манай синглтоныг санах ойд хуваарилах хувьсагч бөгөөд санах ойд хуваарилагдсан бүх хугацаанд үүнийг зааж өгөх болно.

Энэ хувьсагчийг үүсгэсний дараа бидний толгой файл ийм байх ёстой

Алхам 5: Шуурхай функцийг бий болгох

Шуурхай функцийг бий болгох
Шуурхай функцийг бий болгох

Одоо бид жишээ авмаар байна

функц. Функц нь статик функц байх ёстой бөгөөд манай ангийн лавлагааг буцааж өгөхийг хүсэх болно ("EngineDebugSingleton &"). Бид функцийг Instance () гэж нэрлэдэг. Функцэд бид эхлээд ptrInstance == nullptr (! PtrInstance болгон богиносгож болно), хэрэв nullptr байвал энэ нь синглтон хуваарилагдаагүй гэсэн үг бөгөөд if мэдэгдлийн хүрээнд бид шалгах болно. ptrInstance = new EngineDebugSingleton () хийж хуваарилахыг хүсч байна. Энд та синглтоныг санах ойд хуваарилдаг. If мэдэгдлийн хамрах хүрээнээс гарсны дараа бид ptrInstance -ийн зааж өгсөн зүйлийг буцааж өгөх бөгөөд үүнийг "*ptrInstance" синтаксаар илэрхийлнэ. Олон нийтийн статик функцийг хийхдээ бид энэ функцийг маш их ашиглах болно, ингэснээр синглтон үүсч, санах ойд хуваарилагдсан эсэхийг шалгаж болно. Үндсэндээ энэ функц нь үүнийг хийх боломжийг олгодог бөгөөд ингэснээр та ангийн зөвхөн нэг хуваарилалтыг авах боломжтой бөгөөд үүнээс өөр зүйл байхгүй болно.

Instance () функцийг үүсгэсний дараа манай анги иймэрхүү харагдах ёстой. Таны харж байгаагаар бидний хийсэн бүх зүйл ангийн хувийн хэсэгт үлдсэн бөгөөд энэ нь дараагийн хэдэн үе шатанд бага зэрэг өөрчлөгдөх болно.

Алхам 6: Олон нийтийн статик функцийг бий болгох

Олон нийтийн статик функцийг бий болгох
Олон нийтийн статик функцийг бий болгох
Олон нийтийн статик функцийг бий болгох
Олон нийтийн статик функцийг бий болгох
Олон нийтийн статик функцийг бий болгох
Олон нийтийн статик функцийг бий болгох

Та функцийг хийсний дараа

5 -р алхам бол та олон нийтийн статик функцийг эхлүүлж болно. Олон нийтийн функц бүр өөрийн гэсэн хувийн функцтэй байх ёстой бөгөөд энэ функцын нэр ижил байж болохгүй. Яагаад функцийг статик болгох ёстой вэ? Бид олон нийтийн функцийг статик болгож байгаа тул тэдэнд бодит объектгүйгээр хандах боломжтой болно. Тиймээс "EngineDebugSingleObj-> SomeFunction ()" гэх мэт зүйл хийхийн оронд бид "EngineDebugSingleton:: Some Function ()" хийдэг. Энэ нь ганц файлыг үндсэн кодын аль ч хэсэгт хандах боломжтой бөгөөд хэрэв та ажиллаж байгаа төслийнхөө файлын толгой файлыг оруулсан бол. Үүний тусламжтайгаар та олон нийтийн аль ч функцээр дамжуулан синглтон үүсгэж болно.

Энэ зорилгын үүднээс бид "нэмэх ()" ба хасах () гэсэн хоёр нийтийн статик хоосон функцийг бий болгосон. Хувийн хэсэгт бид "PrivAdd ()" ба "PrivSubtract ()" гэсэн хоёр функцийг гүйцэтгэдэг. Бид мөн "NumberOfThings" нэртэй int хувьсагч нэмсэн. Эдгээр функцүүдийн тодорхойлолтыг манай ангийн CPP файлд оруулах болно. Функцийг CPP файлд амархан оруулахын тулд курсороо ашиглан ногоон шугамтай байх ёстой функцийг тодруулж, "Left ALT + ENTER" товчлуурыг дарахад энэ нь танд тодорхойлолтыг үүсгэх сонголтыг өгөх болно. ангиудын холбоотой CPP файл. Толгой файл ямар байх ёстойг харахын тулд Зураг 6.1 -ийг үзнэ үү, бүх функцийн тодорхойлолтыг үүсгэсний дараа таны CPP нь Зураг 6.2 шиг харагдах ёстой, гэхдээ таны функцын тодорхойлолтод код байхгүй болно.

Та одоо Зураг 6.2 дээрх кодыг өөрийн функцын тодорхойлолтонд оруулахыг хүсэх болно. Өмнө дурьдсанчлан, бидний олон нийтийн чиг үүрэг нь Instance () функцийг ашиглах бөгөөд энэ нь ptrInstance -ийн зааж өгсөн зүйлийг буцааж өгөх болно. Энэ нь манай ангийн хувийн функцэд хандах боломжийг олгодог. Ганцаарчилсан олон нийтийн чиг үүргийн хувьд та зөвхөн Instance функцийг дуудах ёстой. Үүний цорын ганц үл хамаарах зүйл бол бидний цуцлах функц юм.

Тэмдэглэл: Энэ алхамд үзүүлсэн нийтийн болон хувийн чиг үүргийг заавал хийх шаардлагагүй, та хувийн функцэд өөр өөр функцын нэр, үйлдэлтэй байж болно, гэхдээ ямар ч төрлийн нийтийн функцын хувьд үүнийг дагах хувийн функцтэй байх ёстой. нийтийн функц нь бидний тохиолдолд Instance () функцийг үргэлж ашиглах ёстой.

Алхам 7: Цуцлах функцийг бий болгох

Цуцлах функцийг бий болгох
Цуцлах функцийг бий болгох
Цуцлах функцийг бий болгох
Цуцлах функцийг бий болгох

Бид ангидаа зөвхөн ганц бие дуугаа санах ойд хуваарилж чаддаг тул бид нийтийн статик функцийг бий болгох ёстой. Энэ функц нь ангийн устгагчийг дууддаг ptrInstance дээр устгах гэж дууддаг бөгөөд дараа нь бид ptrInstance -ийг nullptr болгон буцааж тохируулахыг хүсэх бөгөөд ингэснээр таны програм дуусахгүй бол үүнийг дахин хуваарилах боломжтой болно. Та мөн Singleton -ийн хувийн хувьсагчдад хуваарилсан санах ойг цэвэрлэхийн тулд Singletons -ээ цуцлахыг хүсэх болно.

Алхам 8: PtrInstance -ийг Nullptr болгож тохируулна уу

PtrInstance -ийг Nullptr болгож тохируулах
PtrInstance -ийг Nullptr болгож тохируулах

Ганцаарчилсан дуугаа дуусгахын тулд та EngineDebugSingleton. CPP файл руу орж CPP файлын дээд хэсэгт очихыг хүсэж байна, жишээ нь "EngineDebugSingleton* EngineDebugSingleton:: ptrInstance = nullptr."

Үүнийг хийснээр эхлээд ptrInstance -ийг nullptr болгоно, ингэснээр та жишээ функцийг анх удаа ашиглах үед манай ангийг санах ойд хуваарилах боломжтой болно. Үүнгүйгээр та ямар ч хуваарилагдаагүй санах ойд хандахыг оролдох тул алдаа гарах магадлал өндөр байна.

Алхам 9: Туршилт ба дүгнэлт

Туршилт ба дүгнэлт
Туршилт ба дүгнэлт

Манай singleton ажиллаж байгаа эсэхийг шалгахын тулд бид үүнийг шалгахыг хүсч байна, үүнд 6 -р алхамд дурдсанчлан олон нийтийн функцуудыг дуудах шаардлагатай болно, мөн кодыг шалгахын тулд таслах цэгүүдийг тохируулахыг зөвлөж байна. Энэ нь байх ёстой. Бидний эхлэх цэг нь төслийнхөө main.cpp дээр байх бөгөөд манай main.cpp одоо доорх зураг шиг харагдаж байна.

Баяр хүргэе! Та Singleton Design Pattern -ийн анхны хэрэгжүүлэлтийг хийж дуусгалаа. Энэхүү дизайны загвараар та кодоо янз бүрийн аргаар хялбарчилж болно. Жишээлбэл, та одоо програмынхаа ажиллах хугацаанд ажиллах боломжтой менежментийн системийг хийж болох бөгөөд үүнд статусын функцээр дамжуулан ангиа оруулсан газраасаа хандаж болно.

Таны эцсийн толгой файл 7.1 зураг шиг байх ёстой. Таны синглтонтой холбоотой CPP файл нь Зураг 6.2 шиг харагдах ёстой бөгөөд файлын дээд хэсэгт 8 -р алхамд үзүүлсэн кодыг нэмсэн байх ёстой. Энэхүү заавар нь Singleton Design Pattern -ийн энгийн бүтцийг танд өгсөн болно.

Алдааг олж засварлах зөвлөгөө:

Санах ойтой холбоотой алдаа гарч байна уу?

Та ptrInstance -ийг nullptr болгож тохируулахын тулд 7, 8 -р алхамыг анхаарч үзээрэй.

Хязгааргүй хүрд үүсч байна уу?

Олон нийтийн функцүүдийн тодорхойлолтод та нийтийн функц биш харин хувийн функцийг нэрлэж байгаа эсэхийг шалгаарай.

Синглтон дотор хуваарилагдсан объектууд санах ой алдагдахад хүргэдэг үү?

Синглтоныг дуусгах функцийг өөрийн програмын кодын дагуу дуудаж, синглтоныг устгах төхөөрөмж дээр синглтон кодын хүрээнд санах ойд хуваарилагдсан объектуудыг хуваарилахаа болих хэрэгтэй.