Design pattern is a topic that students often talk about , It is also often used in actual development projects , Skilled people can do it at will , People who are not familiar with you are in deep meditation . The author thinks , It's not just about mastering the usage of design patterns , More insight into the underlying logic of design patterns , That's all , Only in this way can practical problems be solved with appropriate design patterns .
One You should focus on the underlying logic
1 Design patterns
Duan Ziyi ： You ask him to tell you about design patterns , He tells you stories , After listening , Jump and jump , I'm so happy ; Look at the original design pattern and the actual code , Jump and jump again , That's crazy .
Duan zier ： You ask him to tell you about design patterns , He told you about architecture ; You talk to him about architecture , He talks about architecture ; You talk to him about architecture , He talks to you about philosophy ……
The above two typical jokes , You can see the frustration of learning design patterns , I understand the story , But I still haven't mastered the design pattern , Even the class diagram of design pattern everyone I can draw , But still can't grasp the design pattern flexibly . The fundamental reason is that we have not mastered the core idea of design patterns , Just know the external form of design patterns , It's equivalent to only learning “ movements in martial arts or traditional opera ”, Didn't learn “ Internal skill ”.
2 The essence of underlying logic
Many things have underlying logic , After mastering the underlying logic of things , A lot of things are easy to do , If you've got an insight into the core laws , In practical work, we just need to follow the rules to carry out . for example , We've seen a lot of marketing copywriting 、 amazing , If we're going to write these marketing scripts , I couldn't find a way at first , The title is plain and light , Not attractive enough . What is the underlying logic behind marketing copywriting ？ We see a lot of copywriting like “ Four strategies to stimulate learning potential ”、“ How to be in 10 Days to remember 5000+ word ”、“ Why are you worse than others ”…… Some of these copywriters use declarative techniques , Some use questioning techniques , Some use contrast , Some use exclamation …… And dig down , Either way , In essence, it's hitting people's comfort or pain points , Then use the underlying logic to see all kinds of copywriting , Some hit your pain spot , For example, you want to remember more words , Reality can't remember words ; For example, if you want to succeed , But after a long time of hard work, it has no effect …… Some hit your point ： You can get better service for less money ; You can make money without going out …… When you get insight into the underlying logic behind marketing copywriting , You can also write eye-catching scripts now , That's the power of the underlying logic ！
We learn 23 Design patterns , They are divided into creative design patterns 、 Structural design pattern 、 Behavioral design patterns , It's like the way marketing copywriting works , So what is the underlying logic of design patterns ？
Two The underlying logic of design patterns
1 The cornerstone of design patterns
Usually when we write code , We often see the following three types of code ： Noodle code 、 Procedural code and object-oriented code , Here is an example to illustrate the characteristics of these three types of coding .
Noodle code is all logic stacked together , It's like writing an article , Not very segmented . For example, ancient carved characters , Carve a poem on a piece of wood , If the poet wants to change one of them , Then we have to re carve the poem . It's very easy to see the drawbacks of this model ： Coupling is too serious , Pull one hair and move the whole body .
Procedural code has made great progress on the basis of noodle code , It follows “ The top-down , Progressive refinement ” Thought , Divide a big problem into several small ones , Divide and rule . Corresponding to the example of carving poem above , A poem is made up of lines , If only one line of poetry was carved on each board , If you want to change a word , Just re sculpt that line , No need to re carve the whole poem . But if you have to change more than one word , And in different lines , In this extreme case, the whole poem has to be re carved .
As you can see from the above example , The core is insight into the structure and relationship of things , The first answer is what, instead of how. Procedural is overemphasized how, Start thinking about how to do it , Process thinking is self centered , Director of the entire functional process , I've taken on too many responsibilities I shouldn't have , The whole design is inflexible . Object oriented is to look at problems from the perspective of objects , Problem solving is done by the cooperation of various objects , The cornerstone of design patterns is object orientation , It's hooliganism to talk about design patterns without object orientation .
Object oriented code is a new way of thinking , Poetry is made up of lines , Lines are made up of words , This is the idea of movable type printing , These words can also be used in different poems , It's very reusable .
2 The originator of design patterns
There is a classic book on Design Patterns ：《 Design patterns ： Reusable The foundation of object-oriented software 》, In the book, the author mentioned a sentence ：“ Find the change , Packaging changes ”, That's the underlying logic of design patterns . Many people ignore this sentence , Instead, we're going to pursue all kinds of moves , I can't find a suitable design pattern to solve the practical problems .“ Find the change , Packaging changes ” It's a very succinct reminder of the nature of design patterns , Savor this sentence , Let's see 23 Design patterns , Every design pattern is responding to change , For example, the strategic model , Specific strategies are changing ; Factory mode , The objects created are changing ; Template pattern , Specific template algorithm implementation is changing …… It's like the underlying logic of marketing copywriting ： Hit your pain point or hit your cool point , What are the specific pain points and cool points . In practical terms , We need to see what's changing , Choose which design pattern is more appropriate .
3 Let's talk about the underlying logic
Looking back at the underlying logic , What we usually see is only the phenomenal layer , The core is to have an insight into the underlying logic of things , Only in that way can we really understand the phenomenon 、 Use the law , If you don't understand the underlying logic behind marketing copywriting , All your hard work is low level repetition , It's hard to write high quality marketing copy , Once or twice it works well, and you don't know why it's attractive . The same is true of design patterns , You can draw patterns with familiarity UML chart , But you still can't use design patterns well , In essence, I still don't master the underlying logic of design patterns , Only see the phenomenon of the design pattern, the moves of the layer . The underlying logic of design patterns is “ Find change turn , Packaging changes ”, Here are two questions ： What is changing , How to encapsulate change , The master thought we all knew , So I didn't say how to look for change , How to encapsulate change . Next, let's talk about how to use the underlying logic of design patterns .
3、 ... and Two questions to be answered by design patterns
1 What is changing
“ Find the change , Packaging changes ” this sentence , The first thing to answer is what's changing , If the change is not found , It's impossible to encapsulate change . The author here looks at the changes of objects from the perspective of object life cycle , Objects are created by , And then it's used , And finally, death . Objects change in three different dimensions ： Changes in object structure 、 Changes in object specifications 、 Changes in object behavior . Take the change of object structure as an example , The relationship of objects is divided into two categories ： Linear and nonlinear relations （ Trees and pictures ）, In online relationships , How to solve the problem that the change of an object will not affect the associated object ？ In the tree structure , How to solve the problem of increasing new objects ？ In the graph structure , How to solve the problem of user-friendly use of complex systems ？
Finding change is the key , Different business issues , The problems of change are also different , The core is to find these changes . For example, changes in object specifications , There are quantitative changes 、 Change in type 、 Changes in appearance , This kind of thinking is necessary in the process of actual coding , Like creating an object , Let's go deeper , There are no other types of objects ？ Has the quantity changed ？…… Only by finding these changes , How to encapsulate change is a technical problem , Next, we discuss how to encapsulate changes .
2 How to encapsulate change
In terms of the type of encapsulation , There's encapsulation of data 、 Method encapsulation 、 Type encapsulation, etc . In terms of specific packaging methods , The common ones are configuration items 、 Interface 、 Abstract method 、 class 、 annotation 、 Plug in and other specific means , Looking up, we mainly use inheritance 、 The combination method , Let's look at the principle of encapsulation , A common principle is a single responsibility 、 Opening and closing principle 、 Dependency inversion 、 The principle of segregation …… Most people focus more on how to encapsulate change , Not thinking deeply about what's changing .
Four Using underlying logic to derive structural design patterns
1 Looking for changes in object structure
from UML see , There are dependencies between objects 、 generalization 、 Combine 、 polymerization , But in terms of structure, there are only two , Linear and nonlinear relations . The linear relationship is simple , It's a one-to-one relationship , There are two kinds of nonlinear relations ： Tree relation and graph relation .
The structure of the relationship has changed , It means dependency has changed , Like changes in linear relationships ,A Rely on the B There is a change , here B Changes will affect A, How to do it B Changes in the environment do not affect A That's what we have to consider .
2 Coping with linear change
As mentioned above , If B There is a change , because A rely on B, Object A We need to change it too , How to reduce the impact on A What about the impact ？ There are two ways ： One is to solve the problem by increasing adaptation , The other is to solve it through agency . The point of both methods is that an object is not directly associated with a changing object , Whether it's adaptation or proxy , It's the introduction of a third party to communicate with B relation , A third party is responsible for B Interact ,B Yes A There is no perception . Some people immediately found a problem , Isn't that shifting the problem to a third party ？ At first glance , That's true , If we think about it further , If you don't A To work with B Relationship , also E、F……, If B Once changed, all the related objects will change , The price is higher , If only with a third party , Just change one place , The cost is much less .
3 Dealing with nonlinear changes
Nonlinear relationships are more complex than linear relationships , There are two common ways ： One is through the registration mechanism , The other is to shield complexity through the abstraction layer . When an object contains multiple objects , If you manage it directly , There are too many responsibilities to take on , It's better to solve it through the registration mechanism , Add an object , It is through the registration mechanism to actively inform the object . Another way is to mask complexity through the abstraction layer , Like the facade model , Avoid all the complexity in the facade , Provide a simple interface to the outside world .
5、 ... and The way business changes
Design patterns still need to be applied to the actual business in order to play its value , Alan Shalloway Mention a point ： There's no way to predict where it's going to change , But knowing where it might change . Usually when we do business requirement development , Have this awareness of change , Don't fall into process oriented thinking for a while , Don't just think about how to achieve it , It's about thinking about what it is , What will change , Like the number of objects 、 The appearance of the object 、 Type of object …… When you think about it clearly , In order to make the design more reasonable .
For example, when I did the settlement business before , After the investor's financial management is due , Will be the amount of principal and interest to investors , At the beginning, there was only Dahua payment channel , Here's a question to think about , Dahua payment is just a specific way to achieve , Is there any other way to pay , If there is, do abstract design , Design a general payment template class , Every time a new payment channel is connected , Just rewrite a few methods in the template class , Then Minsheng Bank paid 、 Serial payment .
6、 ... and The way of object design
With the foreshadowing of the contents mentioned above , Here is a further summary of some thoughts on object design . There are three problems in object design ： What are the objects ？ What is the relationship between objects ？ What are the responsibilities of the target ？ When these three problems are sorted out clearly , Object design is much easier , It is also the core of object-oriented analysis and design . Normally speaking , We know that structure determines function , Function determines behavior , This is very consistent with people's logical understanding , But it's very difficult to understand the structure of objects , Just like the molecular structure of the new coronavirus is not so easy to crack , Especially complex business , The business objects it contains are not so easy to understand its structure .
We can think in reverse , When there is a business scenario , First think about what its responsibilities are , Think about which business objects should undertake the responsibility , This is also typical inductive thinking . For example, in the coupon business , Its business activities are just three ： Construction of securities 、 Issuance of securities 、 Voucher , Any coupon system , It's going to provide these three most basic capabilities , These three capabilities correspond to two business objects ： Coupon batch and coupon instance , The coupon batch is the template of the coupon , Tell me the budget of the coupon 、 How much is the coupon 、 What are the conditions of use ……, It's the voucher instance that is distributed to users .
When you have business objects , It is necessary to think about the attributes and methods contained in the object model through use cases , This process can not be completed perfectly at one time , It's a lot of polishing , There are some principles to follow , Like single responsibility 、 Opening and closing principle 、 Rely on the principle of inversion ……, Make the whole model more scalable .
7、 ... and A case
Finally, take a case study , The store category is the classification made by the seller for the convenience of the buyer to choose the goods , For example, new categories , Put the recent 30 The commodities in the sky are grouped together , Easy for buyers to find . The challenge is how to use a business model to support the highly customized requirements of different business parties , Some demanders require three levels of categories , Some businesses require floating two-level categories , At the same time, there are different ways to circle products , Some businesses require automatic circle selection of products , The conditions for selecting products are not the same , If you circle by price 、 Circle and select according to the time when the goods are put on the shelves 、 Circle by evaluation ……
How to design this model , Or from the definition of shop category , The store category contains at least two key elements ： Category structure and category circle , Because classification produces structure , Commodities produce circle products , Considering that the categories have different levels and circle conditions , So the first version of the model was quickly designed , From the model, we can see the demands that can support the business , In particular, in the circle conditions, the business party can customize various conditions and register them on the platform , See this design , The author's heart is still gratified .
But in the process of implementation , Some problems were found , Such as root class and subclass , There are two concepts in the business model , There should also be these two concepts in the code , It's the introduction of these two concepts , It's a lot of trouble to write code , There is no difference between them , Now they are artificially distinguished , A lot of logic has to be written twice . The author further optimized the model , It became the second version of the model , This model is simpler .
The two points I want to talk about here are to ensure the simplicity of the model and reduce the technical complexity , Technologists like to delve into technology , I like to apply some of the techniques I have learned to projects , It's actually a technical bias , Only in this way can we reflect the technical complexity and technical ability . Complexity is not necessarily technical , It's like the underlying laws of design patterns , The author doesn't have a long talk , It's just 8 A word " Find the change , Packaging changes ", That's the truth , We learn design patterns , Don't use it just to use design patterns , Be sure to think about why you use , What problems have been solved , It's worth it .
Free collection e-book
《 thorough MySQL actual combat 》
As the top two database in the world ,MySQL It has always been the first choice for developers to learn database . This book sums up MySQL Seven typical scenes in the actual combat of a large factory , And a detailed interpretation of Alibaba's self-developed open source database AliSQL In double 11 Application and practice in the scenario of equal concurrency .
Scan the code and make friends with ALI Mei
Well ~( English letters are lowercase , If scan code is invalid , It can be done by WeChat ID alimei4、alimei5、alimei6、alimei7 Add... Directly )