No video

Visitor Design Pattern

  Рет қаралды 277,852

Derek Banas

Derek Banas

Күн бұрын

Code from the Video: goo.gl/XkW8s
Welcome to my Visitor Design Pattern Tutorial! This is the last part of my design pattern video tutorial.
The Visitor design pattern allows you to add methods to classes of different types without much altering to those classes. You can make completely different methods depending on the class used with this pattern.
With both the video and the code above you should be able to start using this pattern in your code easily.

Пікірлер: 378
@derekbanas
@derekbanas 11 жыл бұрын
You are the exact reason why I continue to make these videos. Thousands of people have taken their time to write the kindest messages to me. When I was making terrible videos many of you reached out kindly and taught me how to get better. I wouldn't be doing this without your kindness and help. I'll do my best to live up to the compliments I receive :)
@RudolfJelin
@RudolfJelin 7 ай бұрын
11 years later, your tutorials are still the best the internet can offer. These 26 bite-sized lectures are a real masterclass. Thank you so much.
@blake5226
@blake5226 2 жыл бұрын
Thanks for the video! It explained the concept very simply and clearly.
@EMAD8366
@EMAD8366 4 жыл бұрын
To be honest you explain codes and DP in the best way! thanks a lot.
@derekbanas
@derekbanas 4 жыл бұрын
Thank you very much :)
@KavinduWijesuriya
@KavinduWijesuriya 7 жыл бұрын
Thank you @Derek. Pretty much better than my lecturer.
@derekbanas
@derekbanas 7 жыл бұрын
Thank you very much :)
@ninonazghaidze7687
@ninonazghaidze7687 5 жыл бұрын
Thank you Derek! You are AWESOME!
@derekbanas
@derekbanas 5 жыл бұрын
Thank you very much :)
@eastuto
@eastuto 10 жыл бұрын
I've read a number of different design patterns books, I've sat through University Lectures and now I sit here studying for my Object Oriented Software Design exam by watching your Design Pattern videos. In each video, you have explained the concepts better than every text and every lecture. You deserve an award. If you accept paypal donations, I will gladly donate.
@derekbanas
@derekbanas 10 жыл бұрын
Wow thank you for the wonderful compliment :) There is no need to donate. I just ask if you think someone would benefit from my videos that you tell them about them. You're very welcome.
@donalfonsnisnoni2819
@donalfonsnisnoni2819 5 жыл бұрын
@@derekbanas Youre.. awesome... people like me confusing about this stuff... i read a lot of article but thats not enough.... but your video is perfect, 100% understood... i promise if i had a job .. i will donate to your patreon account...
@shaunperetz6868
@shaunperetz6868 4 жыл бұрын
5 years later and nothing changed. Spent half a semester in class and didn't quite get it. Watched all tutorials for Design Patterns and everything makes sense. Thank you
@omarshawky5859
@omarshawky5859 4 жыл бұрын
@@derekbanas well, to complete the complements, i watched, matlab, arduino, uml, java (94 vids), design pattern, and soon anything related to swift and android, also code refactoring and so on, i have actually a list of 30 course you provide that i will finish asap, literally, what i learn is 90% because of you, thanks Mr. Derek :)
@ronrolle7610
@ronrolle7610 2 жыл бұрын
best to the topic I have ever seen / thank you
@thomasgong5538
@thomasgong5538 2 жыл бұрын
Your voice is excellent! Like a British Broadcaster named Jerimy Clarkson.
@derekbanas
@derekbanas 2 жыл бұрын
Thank you for the nice compliment :)
@tusharbende2007
@tusharbende2007 7 жыл бұрын
Thanks ..very nicely explained with a very simple example to understand.
@derekbanas
@derekbanas 7 жыл бұрын
Thank you :) I'm glad it helped
@calebm6485
@calebm6485 11 ай бұрын
This was super helpful!
@arpitnot4u
@arpitnot4u 2 жыл бұрын
its 2022 and still your videos are the best 🙂
@awb19892
@awb19892 4 ай бұрын
Really nice video! I think I've used things like this before without standard names like accept and so on, but never knew the name.
@kirlampallimurty5115
@kirlampallimurty5115 6 жыл бұрын
Really Wonderful example to better understand this pattern, Thanks a lot
@derekbanas
@derekbanas 6 жыл бұрын
Thank you very much :)
@surawatthana
@surawatthana 10 жыл бұрын
excellent visitor explanation
@derekbanas
@derekbanas 10 жыл бұрын
Thank you :)
@jalalsadeghi66
@jalalsadeghi66 6 жыл бұрын
A very good explaining of visitor design pattern
@derekbanas
@derekbanas 6 жыл бұрын
Thank you :)
@b4hr4m
@b4hr4m 4 жыл бұрын
I tried at least 5 other sources to understand this design pattern but I failed. Finally, I got it by watching only half of your video while I never did java. Really good job.
@derekbanas
@derekbanas 4 жыл бұрын
Thank you for taking the time to tell me I helped :) I appreciate it!
@ToeShimmel
@ToeShimmel 2 жыл бұрын
Your video's are a godsend
@derekbanas
@derekbanas 2 жыл бұрын
Thank you very much :)
@stefanvercillo2234
@stefanvercillo2234 2 жыл бұрын
Awesome video, super helpful and concise. Ur a G Derek Bannanas .
@gandamraviteja7019
@gandamraviteja7019 9 ай бұрын
Superb awesome explanation You really helped me a lot Thanks feels very tiny word for your work
@steff420
@steff420 2 жыл бұрын
very well made video. thank you
@ericli1111
@ericli1111 6 жыл бұрын
Thanks for your tutorial.
@derekbanas
@derekbanas 6 жыл бұрын
Thank you for watching :)
@TuringMachines
@TuringMachines 3 жыл бұрын
Must have a donate button !!!!
@gg2000gg2000
@gg2000gg2000 8 жыл бұрын
Very helpful! Thank you
@derekbanas
@derekbanas 8 жыл бұрын
+gg2000gg2000 Thank you :) You're very welcome :)
@MayankDidwania
@MayankDidwania 3 жыл бұрын
Your words @10:46, " I also don't know, how much cigars cost?" just a beautiful message hidden behind those words. [good message to not to do this] Kudos, and I followed all your DP tutorials and all are worth. Thanks @Darek Banas for making an positive impact to the society. :) :)
@derekbanas
@derekbanas 3 жыл бұрын
Thank you for your kind words :) Yes I agree it is definitely a good idea to tell people to avoid tobacco
@pr0master
@pr0master 11 жыл бұрын
Hi Derek! Just wanted to let you know, I passed my Design Pattern course. Because of who? You! Thnx!
@derekbanas
@derekbanas 11 жыл бұрын
You're very welcome :) When I make tutorials I use normally the top 3 to 5 books and at least that many online tutorials along with notes I've taken over the years. I figure that way I'll be certain to cover everything. The GOF book is considered to be the best book on patterns, but it definitely isn't the most useable so I use the best parts of every book. I'm glad it helped
@gumball5836
@gumball5836 2 жыл бұрын
Your videos on design patterns are simply the best!!!!
@christopherbarrett9900
@christopherbarrett9900 7 жыл бұрын
Very well explained. I heard before coming to this video that this was a potential solution to instanceof being used in code (which I have seen a lot of). I will try to implement it using the concepts you have passed across.
@derekbanas
@derekbanas 7 жыл бұрын
Thank you :) I'm glad it helped
@kaddy4188
@kaddy4188 9 жыл бұрын
You are great! Thank you sooo much... youve got a fan in germany now :)
@derekbanas
@derekbanas 9 жыл бұрын
Kaddy Ka Thank you :) I'm very happy I could help.
@Romanpuss
@Romanpuss 6 жыл бұрын
THANK YOU! was confusing learning this in class. Really needed a more "real life" example like this video provides! great job.
@derekbanas
@derekbanas 6 жыл бұрын
I'm happy I could be of help :)
@markbatdorff8119
@markbatdorff8119 8 жыл бұрын
Great tutorials
@derekbanas
@derekbanas 8 жыл бұрын
+Mark Batdorff Thank you :)
@stephenandrews615
@stephenandrews615 6 жыл бұрын
Super clear explanation thanks :)
@derekbanas
@derekbanas 6 жыл бұрын
Thank you :)
@maxhoffmannable
@maxhoffmannable 8 жыл бұрын
this was extremly helpfull
@derekbanas
@derekbanas 8 жыл бұрын
+Max Hoffmann Thank you very much :)
@limpei7675
@limpei7675 7 жыл бұрын
the clearest video i have ever watched on visitor pattern
@thangamarumugam6402
@thangamarumugam6402 7 жыл бұрын
really you are doing great help...i learned much better...thank you very much for your great help..:)
@derekbanas
@derekbanas 7 жыл бұрын
Thank you :) I'm happy to be of help
@Sevius969
@Sevius969 10 жыл бұрын
Thanks. Useful video
@derekbanas
@derekbanas 10 жыл бұрын
Channel131 You're very welcome :)
@silvermoon7719
@silvermoon7719 2 жыл бұрын
2 words "thank you"
@derekbanas
@derekbanas 2 жыл бұрын
You’re very welcome :)
@derekbanas
@derekbanas 11 жыл бұрын
Thank you :) I do my best to cover topics completely that are normally not paid their do respect.
@derekbanas
@derekbanas 11 жыл бұрын
Thank you very much :) For some reason this is a topic that is ignored. I'm happy that people are getting something out of them
@rohitahuja5565
@rohitahuja5565 Жыл бұрын
Brilliant!
@ratias0
@ratias0 4 жыл бұрын
Excellent, thank you very much
@derekbanas
@derekbanas 4 жыл бұрын
Happy to help
@alialmaany1498
@alialmaany1498 9 жыл бұрын
thanks a lot very very useful video ;
@derekbanas
@derekbanas 9 жыл бұрын
Ali Almaany You're very welcome :)
@derekbanas
@derekbanas 11 жыл бұрын
I agree that I shouldn't and don't do that in the real world. I did it in these videos because I thought it distracted from the code and I had previously mentioned what it was for. Sorry about that. I have learned my lesson.
@FaizaanDatoo
@FaizaanDatoo 4 жыл бұрын
I LOVE YOU DEREK
@derekbanas
@derekbanas 4 жыл бұрын
Love you too :)
@LiamMcCann1992
@LiamMcCann1992 9 жыл бұрын
Great video!
@derekbanas
@derekbanas 9 жыл бұрын
Liam McCann Thank you :)
@charlesschneiderp
@charlesschneiderp 6 жыл бұрын
Thank you!
@derekbanas
@derekbanas 6 жыл бұрын
I'm happy to be of help :)
@shikhasingh4657
@shikhasingh4657 4 жыл бұрын
Such a nice video series!! Plus you have such a cute voice :)
@derekbanas
@derekbanas 4 жыл бұрын
Thank you for the nice compliment :)
@simonegiorgio5018
@simonegiorgio5018 7 жыл бұрын
Thanks man, very useful!
@derekbanas
@derekbanas 7 жыл бұрын
Thank you very much :)
@derekbanas
@derekbanas 11 жыл бұрын
I'm very boring in real life. I just write programs all day
@vijaysridhara
@vijaysridhara 8 жыл бұрын
You are awesome.. This Visitor pattern, you could only clarify!
@derekbanas
@derekbanas 8 жыл бұрын
+Vijay Sridhara Thank you :) I'm glad it helped
@iisrail
@iisrail 10 жыл бұрын
this is the simplest explanation of this pattern I've ever seen until now. Thank you.
@derekbanas
@derekbanas 10 жыл бұрын
Thank you very much :) I'm glad you found it useful.
@Felixantony84
@Felixantony84 9 жыл бұрын
really great.. !!! Thank you...
@derekbanas
@derekbanas 9 жыл бұрын
Felix Antony You're very welcome :)
@JasonRobards2
@JasonRobards2 Жыл бұрын
Digged my way through the whole series. Several saturdays well spend! Amazing how I only discovered this channel 10 years after this groundbreaking series was first publisched. I remember from those days good tutorials were scarce and weren't always very easy on the ear (not you, Kahn Academy). With the poll at the end it struck me how much of it you did right, despite probably having very little to go on, and figuring things out as you went along.
@derekbanas
@derekbanas 11 жыл бұрын
This is normally used when you want to add functionality, but can't change the code much at all. You can also slap on a bunch of custom methods depending on the class. I made the example simple, but it can get much more complicated if you implement many interfaces. I hope that helps
@derekbanas
@derekbanas 11 жыл бұрын
You're very welcome :) Ill get back into web development and cover those topics, but I have to cover android and game development first. Sorry, but I held a vote and that is what won
@anything0212
@anything0212 Жыл бұрын
Hi, just found out these videos 10 years after. They are the best explanation I've seen for GOF design patterns! Thank you for making this.
@aspiringtentacle
@aspiringtentacle 10 жыл бұрын
Fantastic video, it finally makes sense =)
@derekbanas
@derekbanas 10 жыл бұрын
Thank you :) i'm glad I could help.
@tharinduwijekoon1669
@tharinduwijekoon1669 Жыл бұрын
Hey, I just wanted to let you know that these tutorials were amazing and made it very easy to understand these design patterns. Thank you!
@madhu601
@madhu601 8 жыл бұрын
Loved the video :)
@derekbanas
@derekbanas 8 жыл бұрын
Thank you :)
@spwwmtb
@spwwmtb Жыл бұрын
10yr old video and helped me a lot Derek. Glad that I was already a sub and found this video from you, you always have the best examples!
@aidando5047
@aidando5047 Жыл бұрын
Hey Derek. I've just finished your entire design patterns series. Thank you for this. They covered this stuff in university but I finally feel like I get it now.
@123japanuser
@123japanuser 11 жыл бұрын
Very kind
@agnichatian
@agnichatian 9 жыл бұрын
Quite clear.
@derekbanas
@derekbanas 9 жыл бұрын
agnichatian Thank you :)
@TuncTurel
@TuncTurel 7 жыл бұрын
Hi Derek, Since I didn't know about this pattern before my gut reaction was as follows: Make a class called Necessities and let Liquor, Cigar and Milk extend that. Make another class called Taxes and add GetTaxedPriceFor(Necessities necessities, Date date). This method would take a commodity and the time and returns the corresponding tax for that. This way I could make a call like the following: Taxes.GetTaxedPriceFor(Milk,22/5/2017); Now, here I understand that every time you need to change tax calculations and you want to add new Necessities to the switch you need to open Taxes class and place a bunch of code in there. Soon you'll be hitting so many lines... Oh my god! (Edit: As an addition perhaps it's even better to assign types to necessities so the switch doesn't grow out of proportion and can return the taxed value for all foods for example.) In the Visitor pattern however you'll need to expand the TaxVisitor to handle this situation instead. The more implementations of Necessities you have the more you'll need to handle in the TaxVisitor. So what is the benefit here? Why should I use the Visitor pattern instead? I understand that I'm missing the point here so I kindly ask for your help. (Or any of the commenters for that matter.)
@DreamCatcher201
@DreamCatcher201 8 жыл бұрын
really cool. thanks!
@derekbanas
@derekbanas 8 жыл бұрын
+rytah01 Your welcome :)
@indian2339
@indian2339 4 жыл бұрын
thank you!
@derekbanas
@derekbanas 4 жыл бұрын
I'm happy I could help :)
@derekbanas
@derekbanas 11 жыл бұрын
You're very welcome :) Yes you could do that, but the goal at least in this tutorial is to make everything an interface over an abstract class if at all possible. The pattern is also defined that way. There are always tradeoffs that you'll have to make decisions on depending on your situation. I always plan on needing to make changes in the future so I use interfaces whenever I can. (Just a personal opinion)
@wadebeveridge3208
@wadebeveridge3208 2 жыл бұрын
I know this was from forever ago, but I just want to say your style of videos is extremely informing and easy to follow. Well done!
@eliasheck4084
@eliasheck4084 Ай бұрын
LEGEND
@derekbanas
@derekbanas 11 жыл бұрын
Thank you very much :) I'm not very well known. I doubt the Khan Academy even knows I exist. Mr. Khan was definitely an inspiration for us all!
@derekbanas
@derekbanas 11 жыл бұрын
You're very welcome :) I'm very happy that this series has helped
@derekbanas
@derekbanas 11 жыл бұрын
I doubt many people would disagree with that :) I also don't vote for either party
@stepbystepcoding4113
@stepbystepcoding4113 2 жыл бұрын
Godsend video for sure, where did you learn how to do all this? are you just good at reading technical textbooks? or did you have a really good teacher? or how did this happen?, I'm always curious like how things came to be
@derekbanas
@derekbanas 2 жыл бұрын
Thank you very much :) When I went to work at Apple, my mentor made me memorize countless patterns, how to structure solutions using sequence diagrams, algorithms and refactoring. I made videos for all of the above to help others. He just gave me printouts of everything. Martin Fowler has written good books on this subject
@derekbanas
@derekbanas 11 жыл бұрын
Yes they will more then likely follow the C tutorial. You'll be amazed by how simple it is
@derekbanas
@derekbanas 11 жыл бұрын
The visitor pattern is used when you have an interface and many subclasses that implement it. What happens when you want to add a function to all of the subclasses while causing minimal changes to the interface? By using the visitor pattern you can change the interface once and then allow an unlimited number of changes in the future to any class that implements it. Does that make sense? It is the ultimate in flexibility!
@Mrgreatestfreakout
@Mrgreatestfreakout 11 жыл бұрын
BOTH!
@dummyone5845
@dummyone5845 4 жыл бұрын
Hi Sir, I just went through your video. It is very simple and straight forward. I have a question on this content. In client.cs Instead of calling milk.accept(taxCalc); Why cant we write TaxCalc.Visit(milk); I don't understand why we need an IVisitable interface and the accept method at all.
@derekbanas
@derekbanas 11 жыл бұрын
You're very welcome :) I'm sorry, but I don't know of such a source. There have only ever been 3 books written on refactoring ever as far as I know. This is a topic that has been kind of ignored for some reason? I plan on adding quiz functionality to my site and I'll do my best to drive home the power of each pattern when I do that
@andylinkOFFICIAL
@andylinkOFFICIAL 2 жыл бұрын
The thing I don't like about this pattern is that it needs an a really good explanation in order to understand it.
@Jared-Cruz
@Jared-Cruz 5 жыл бұрын
Had no idea how this design pattern worked ... until I saw your video! Great explanation, thanks a lot!
@derekbanas
@derekbanas 5 жыл бұрын
Thank you 😁 I'm happy I could help
@SunnyLolek
@SunnyLolek 8 жыл бұрын
Hi Derek, What about Object Pool, Private Class Data, and Null Object design patterns? BTW, great job! I love your tutorial. Although, you could work a bit on your UML diagrams to stick more to the convention. ;) Regards, Andrzej
@derekbanas
@derekbanas 8 жыл бұрын
+Andrzej Niedziela Thank you :) I hope to make more videos like this soon. I try to stick to the by the book way of using UML, but some times deviate if I think a design makes more sense if I bend the rules.
@derekbanas
@derekbanas 11 жыл бұрын
I'll incorporate DPs into my next series. Thank you for the request :)
@derekbanas
@derekbanas 11 жыл бұрын
I can't do both because they are both big subjects. Voting starts next week!
@HarshPrriyaOfficial
@HarshPrriyaOfficial 3 жыл бұрын
Why it is important to have a accept method within each of item? For example: Can't we directly call taxCalc.visit(milk) instead of milk.accept(taxCalc)? In that way, we absolutely have to make no change in the item object.
@derekbanas
@derekbanas 11 жыл бұрын
Thank you :) Im glad you liked it
@swaantjuh
@swaantjuh 7 жыл бұрын
I followed a course called Object Orientation last semester , and to be honest, I've learned just as much about it watching and implementing your tutorials in the past 3 days as I did in the course which lasted like 4 months..
@derekbanas
@derekbanas 7 жыл бұрын
Thank you :) I'm happy I could be of help
@vutranang8053
@vutranang8053 Жыл бұрын
the legend
@derekbanas
@derekbanas 11 жыл бұрын
Thank you :) Im happy that you have liked them. So, your question is how do you implement this pattern in C++?
@shaikzillani6106
@shaikzillani6106 4 жыл бұрын
I'm watching a 7 year old video because design patterns never gets old or get updated.
@derekbanas
@derekbanas 4 жыл бұрын
Happy I could help :)
@AdFundum14
@AdFundum14 10 жыл бұрын
Hi there! Just wanted to say a big thanks and thumbs up for all of your design pattern video's! They are much more fun to follow than reading my book, and are often also much clearer. I also love the originality of your examples to find a good real-life illustration, it makes memorizing the patterns much easier. You changed them from boring theoretical lessons to some pretty amazing things for me! Since you mention that you like to hear feedback, I'll mention that I found the examples using a non-standard libraries (like Swing) a tiny bit harder to understand and memorize, because I don't have the necessary experience yet to understand them right-off. But it's a tiny detail and off course those video's were still very helpful. Cheers, a lot!
@derekbanas
@derekbanas 10 жыл бұрын
Hi, Thank you :) I did my best to make the patterns understandable. That is my main job since other wonderful people discovered all of this stuff. Thank you for the feedback.
@derekbanas
@derekbanas 11 жыл бұрын
Which ever side wins will get their tutorial. Hopefully this won't divide everyone, but I can only pick one or the other to do next and do them the right way. I want the next tutorial to be great and perfect. That can only happen if I spend 6 months putting it together. I'll honor which ever group gets the most votes :)
@sjpcf
@sjpcf 10 жыл бұрын
Thank you so so so much for all these videos I 'm currently in a large scale software development course and my professor has spent weeks on explaining some patterns and i've still been lost and in a couple 15 min videos you cleared up a lot Thanks again!
@derekbanas
@derekbanas 10 жыл бұрын
You're very welcome :) Thank you for taking the time to tell me I was able to help.
@derekbanas
@derekbanas 11 жыл бұрын
Yes, but right and wrong don't seem to matter in universities. The GOF book states that design patterns are but a guide to work with and not an iron clad recipe.
@klarnorbert
@klarnorbert 9 жыл бұрын
I just watched all of your "Design Pattern" Videos, it was so helpful. I really appreciate to making this series. Thanks Derek.
@derekbanas
@derekbanas 9 жыл бұрын
Norbert Klár Thank you :) I'm very happy that they helped
@kokodaioh
@kokodaioh 9 жыл бұрын
more clear than my IT prof. thanks Derek!!
@derekbanas
@derekbanas 9 жыл бұрын
***** You're very welcome :)
@kaanetutmerkezi1436
@kaanetutmerkezi1436 8 жыл бұрын
A pattern which seemed very difficult in the Gang of Four, became very clear thanks to your video!!! Love your style...
@derekbanas
@derekbanas 8 жыл бұрын
+Kaan Etüt Merkezi Thank you :) I'm glad it helped.
@bnegrao
@bnegrao 11 жыл бұрын
Hello Derek, thank you for this video. It looks to me that the "Visitable" Interface is unnecessary. With the bellow I can calculate the taxes and I don't need to change the Necessity, Liquor and Tobacco classes. // ... create milk, vodka and cigars objects here... TaxVisitor taxCalc = new TaxVisitor(); double milkPriceWithTax = taxCalc.visit(milk); double vodkaPriceWithTax = taxCalc.visit(vodka); double cigarsPriceWithTax = taxCalc.visit(cigars); Why using this pattern then?
@derekbanas
@derekbanas 11 жыл бұрын
I'll put up the voting page next week on my website. Voting will be open for a week. Thank you for your interest :)
@naguibihab9111
@naguibihab9111 8 жыл бұрын
Excellent and simple and I love how you showed the 'with and without' part
@derekbanas
@derekbanas 8 жыл бұрын
+Naguib Ihab Thank you :) I'm glad you found it useful
Install Eclipse for Java
7:21
Derek Banas
Рет қаралды 297 М.
Understanding The Visitor Design Pattern
32:08
Ryan Schachte
Рет қаралды 57 М.
Just Give me my Money!
00:18
GL Show Russian
Рет қаралды 539 М.
Get 10 Mega Boxes OR 60 Starr Drops!!
01:39
Brawl Stars
Рет қаралды 19 МЛН
🩷🩵VS👿
00:38
ISSEI / いっせい
Рет қаралды 27 МЛН
Decorator Design Pattern
12:57
Derek Banas
Рет қаралды 424 М.
The BEEFY mini PC - Minisforum AtomMan G7 PT
12:40
ShortCircuit
Рет қаралды 184 М.
Command Design Pattern
23:41
Derek Banas
Рет қаралды 283 М.
The Playstyle So OP, Mojang Banned It 4 Times
13:54
XayXay
Рет қаралды 192 М.
Observer Design Pattern
22:27
Derek Banas
Рет қаралды 661 М.
State Design Pattern
20:51
Derek Banas
Рет қаралды 239 М.
Mediator Design Pattern
18:31
Derek Banas
Рет қаралды 116 М.
Just Give me my Money!
00:18
GL Show Russian
Рет қаралды 539 М.