design-pattern | 设计模式(java) | Runtime Evironment library
kandi X-RAY | design-pattern Summary
kandi X-RAY | design-pattern Summary
设计模式(java)
Support
Quality
Security
License
Reuse
Top functions reviewed by kandi - BETA
Currently covering the most popular Java, JavaScript and Python libraries. See a Sample of design-pattern
design-pattern Key Features
design-pattern Examples and Code Snippets
Community Discussions
Trending Discussions on design-pattern
QUESTION
I'm very new to Istio and not a Kubernete's expert, though I have used the latter. I respectfully ask for your understanding and a bit more details than you might normally include.
For simplicity, say I have two services, both Java/SpringBoot. Service A listens to requests from the outside world, Service B listens to requests from Service A. Service B is scalable, and at points might return 503. I wish to have service A retry calls to service B in a configurable non-programmatic way. Here's a blog/link that I tried to follow that I think is very similar.
https://samirbehara.com/2019/06/05/retry-design-pattern-with-istio/
Two questions:
It may seem obvious, but if I wanted to define a virtual retriable service, do I add it to the existing application.yml file for the project or is there some other file that the networking.istio.io/v1alpha3 goes?
Would I define the retry configuration in the yaml/repo for Service A or Service B? I can think of reasons for architecting Istio either way.
Thanks, Woodsman
...ANSWER
Answered 2022-Apr-08 at 14:29If the scalable service that is returning 503
, it makes sense to add a virtual service just like the blog example for serviceB
and make serviceA
connect to virtualServiceB
which will do the retries to ServiceB
Now, for this to work (from within the cluster):
QUESTION
I'm new to OpenSearch, and I'm following the indexing pattern mentioned here for a POC.
I'm trying to test the mapping mentioned here : https://github.com/spryker/search/blob/master/src/Spryker/Shared/Search/IndexMap/search.json in OpenSearch dev console.
...ANSWER
Answered 2022-Mar-30 at 03:46You need to replace page
by _doc
(or remove it altogether) as there's no more mapping types
QUESTION
In a previous question I asked, a responder suggested I organize my data as a DataFrame of DataFrames.
...ANSWER
Answered 2022-Mar-08 at 20:45Like h5py
, PyTables (aka tables
) can also create and read HDF5 files. Pandas
uses PyTables "under the hood" to create and read HDF5 files. PyTables has some useful search features to do exactly what you want to do. For completeness, I included a brief summary at the end of this answer that compares each package.
Here is an example I created to demonstrate the search behavior using your dataframe (dictionary) data.
To create the HDF5 file:
Note: most of the "work" creating the HDF5 file is (re)organizing your dictionary data into a NumPy recarray. The process can be simplified if the data structure is modified (shifting dictionary key/value levels) -- that assumes the structure isn't set yet.
Summary of steps:
- Create a
np.dtype
that defines the fields (columns) of data. - Determine recarray rows by counting the number of dictionary items associated to each primary key.
- Create a recarray of zeros with 1 and 2 above.
- Loop thru the dictionary and map keys and values to appropriate row and field(column) name.
Code below:
QUESTION
I know this is well trodden territory but I have a specific question... I promise.
Having spent very little time in the statically typed, object oriented world, I recently came across this design pattern while reading Crafting Interpreters. While I understand this pattern allows for extensible behavior (methods) on a set of well defined existing types (classes), I don't quite get the characterization of it as a solution to the double dispatch problem, at least not without some additional assumptions. I see it more as making a tradeoff to the expression problem, where you trade closed types for open methods.
In most of the examples I've seen, you end up with something like this (shamelessly stolen from the awesome Clojure Design Patterns)
...ANSWER
Answered 2022-Feb-23 at 19:13The comment from @user207421 is spot on. If a language does not natively support double dispatch, no design pattern can alter the language to make it so. A pattern merely provides an alternative which may solve some of the problems that double dispatch would be applied to in another language.
People learning the Visitor Pattern who already have an understanding of double dispatch may be assisted by explanations such as, "Visitor solves a similar set of problems to those solved by double dispatch". Unfortunately, that explanation is often reduced to, "Visitor implements double dispatch" which is not true.
The fact you've recognized this means you have a solid understanding of both concepts already.
QUESTION
The Gang of Four book states the following:
[...] The main relationships in MVC are given by the Observer, Composite and Strategy design patterns.
The best example of this I could find was this github repo, which shows the following class diagram:
I'm particularly interested in the Strategy part of the MVC, where the following holds:
MVC Name GoF Name View Context Controller Strategy ConcreteController ConcreteStrategyRegarding the relationship between View and Controller, The book Head First Design Patterns states the following:
The controller may also ask the view to change. When the controller receives an action from the view, it may need to tell the view to change as a result. For example, the controller could enable or disable certain buttons or menu items in the interface
It also shows an example where the ConcreteController
equivalent BeatController
) defines an additional association with the ConcreteView
equivalent (DJView
):
ANSWER
Answered 2022-Feb-15 at 15:40To address one part of your question: the relationship between Context
and Strategy
in the Strategy pattern. The UML diagram you see in books etc. is just a sample implementation, and this usually shows just the link from Context
and Strategy
. However the Strategy
has to know something about its Context
to do its job and this is usually passed as arguments in the method invocation on the Strategy
object. When there are many arguments to pass, they may be replaced by passing a reference to the Context
object to the Strategy
constructor. This decision is an example of 'tailoring a pattern to fit its context'.
QUESTION
I was learning about the Bridge Design pattern. To quote:
The Bridge pattern attempts to solve this problem by switching from inheritance to the object
composition
. …
And then, the following image is shown:
When people are talking about composition as an alternative for inheritance, do they refer to both aggregation and composition relationships? If not, what do they mean exactly?
I wonder this because the picture has an aggregation relationship between Color
and Shape
, not a composition one.
ANSWER
Answered 2022-Feb-03 at 13:37Normally, when people talk about using composition vs. inheritance, they are talking about alternative ways of solving the same problem. In both cases, a "base class" provides an implementation of an interface that you want to reuse in your "derived class"
When you implement this with inheritance, there is an undesirable is-a relationship between the derived class and the base class, with the effect that implementation details of the base class, which should be hidden, can become changes in the derived class class.
When you implement this with composition -- a real composition relationship -- the "derived" only has an is-a relationship with the interface that it wants to implement, and the cost of this is that it must delegate calls to the "base" class.
In the Bridge pattern, which you reference, the goal is a little different. You do want to isolate the containing class from change to the connected implementation, but there is no is-a relationship between the containing class and an interface of the contained class.
The relationship between them may be one of composition, or may be simple aggregation -- that is an implementation detail. Often, the concrete implementation of the contained class will be injected as an interface into the containing class constructor, and in that case the relationship is just aggregation.
QUESTION
We are using the "auto delay until last" pattern from the docs, https://www.optaplanner.org/docs/optaplanner/latest/design-patterns/design-patterns.html
The loop detection computation is extremely expensive, and we would like to minimize the number of times it is called. Right now, it is being called in the @AfterVariableChanged
method of the arrival time shadow variable listener.
The only information I have available in that method is the stop that got a new previous stop and the score director. A move may change several planning variables, so I will be doing the loop detection once for every planning variable that changed, when I should only have to do it once per move (and possibly undo move, unless I can be really clever and cache the loop detection result across moves).
Is there a way for me, from the score director, to figure out what move is being executed right now? I have no need to know exactly what move or what kind of move is being performed, only whether I am still in the same move as before.
I tried using scoreDirector.toString()
, which has an incrementing number in it, but that number appears to be the same for a move and the corresponding undo move.
ANSWER
Answered 2021-Nov-29 at 09:25No, there is no access to a move from scoring code. That is by design - scoring needs to be independent of moves executed. Any solution has a score, and if two solutions represent the same state of the problem, their scores must equal - therefore the only thing that matters for the purposes of scoring is the state of the solution, not the state of the solver or any other external factor.
QUESTION
I am currently refactoring my code structure to the MVVM-Design-Pattern. In the official android.com documentation (https://developer.android.com/topic/libraries/architecture/viewmodel) they write the following:
Caution: A ViewModel must never reference a view, Lifecycle, or any class that may hold a reference to the activity context.
The Problem is, in my current code I am using ContentResolver to query the Contacts-Database on the phone.
...ANSWER
Answered 2021-Nov-25 at 15:41If you need to access a context in a ViewModel, you can use an AndroidViewModel, which lets you access an application context using getApplication()
. You can use that to get things like a ContentResolver.
The cautionary note you listed is about not using or storing an activity, fragment, view, or other lifecycle component in the ViewModel - not really applicable to an application context (which is sometimes needed to get things like strings, or in your case, a ContentResolver, that are not tied to a view lifecycle).
QUESTION
I have a question about new
and delete
:
Should I use delete
for the input parameter or member object, e.g.:
https://github.com/jwbecalm/Head-First-Design-Patterns-in-CPP/blob/main/ch01_Strategy/main.cpp
Should I use delete
on the object allocated by new FlyNewWay()
?
ANSWER
Answered 2021-Oct-20 at 07:00Yes whenever you use new
keyword to allocate some memory then you must always use delete
to free up that memory later when no longer needed. Otherwise you will have a memory leak as in your program. In your case you should use delete
inside the destructor in the MallarDuck.cpp .
Other solution would be to use smart pointers like unique_ptr
so that you don't have to explicitly free the memory.
unique_ptr`'s syntax would something like:
QUESTION
I find it difficult to learn both Design Pattern and UML since there are different ways to describe the same pattern which make me unsure what is the single source of truth.
Take Iterator pattern for example, here are just a few diagrams that I saw from well-known sites:
1 WIKIPEDIA
https://en.wikipedia.org/wiki/Iterator_pattern
2 TUTORIALS POINT
https://www.tutorialspoint.com/design_pattern/iterator_pattern.htm
3 REFACTORING GURU
https://refactoring.guru/design-patterns/iterator
4 OODESIGN
https://www.oodesign.com/iterator-pattern.html
5 HOWTODOINJAVA
https://howtodoinjava.com/design-patterns/behavioral/iterator-design-pattern/
What confuses me the most is how arrow symbols are used to describe the relationship between these classes. Sometimes they are generalization, sometimes interface realization, directed association or dependency. Even composition is also used...
I wonder what would be the best way for me to get my head around all this.
...ANSWER
Answered 2021-Aug-31 at 08:47In general, one needs to be very careful when looking at UML models for design patterns. There are three reasons:
- The reference for design patterns is the GoF. This book was published in 1995, before UML even existed, and used a variation of the OMT notation (an ancestor of UML). In case if doubts, this is the source to trust.
- The Java language design was made public in 1995, JDK 1.0 release in January 1996, and the language not yet widely known. The authors based their designs and code examples on a C++ class model, i.e. on classes and inheritance only, without bothering for multiple inheritance. Most modern languages do not support multiple inheritance. As a consequence, some of the original patterns have to be adapted for Java, C# or Swift, to make a distinction between classes, abstract classes and interfaces, and between inheritance and interface implementation. There are multiple ways to do this. For example, some systematically converted abstract classes to interfaces. Some converted them only when there was a conflict. And some converted according to the interface "spirit".
- Misunderstandings happen. Some people publish such diagrams on the net but misunderstand the pattern, or misunderstand UML, or both together. Also, Gamma et al started the book when they were PhD students and also made some mistakes. You'll find for example some inconcsitencies in their use of the OMT aggregation.
- The worst case is the Builder pattern, where you have not only those problems, but on top of that you have a naming conflict: a very popular Java book introduced a (very different) variant of the builder pattern, with a different intent and another design, which caused total confusion.
Now to your specific example, and based on the content you have provided:
- oodesign is the closest to the original pattern and fully accurate. Btw, I mostly use links to their pages when it comes to patterns.
- refactoring guru is also a good choice. They opted to use interfaces instead of abstract classes, which is fine. But they have redefined the interface's operations and properties (probably in relation to own examples) and require a bidirectional navigation that seems not justified. If you're interested, there is a "Head First: Design patterns" which uses a similar mapping but keeps the original interface.
- wikipedia is not bad either: they have left out the client (which the GoF showed in light gray, to suggest that it's not essential for this pattern); They are more precise and complete on dependencies; But they also redefined the operations and properties differently. And they added an unnecessary aggregation symbol.
- How to make it in Java is confusing, because they kept one abstract class and opted for an interface for the other. And they have hidden the operations and properties. But there's nothing fundamentally wrong at first sight.
- Forget about tutorial points, at least for this UML diagram. It's plain wrong, as @qwerty_so already mentioned in the comments.
The statement of accuracy is for this pattern only and for the current version of the content. This cannot be generalized to all the design patterns in view of my introductory remarks.
Community Discussions, Code Snippets contain sources that include Stack Exchange Network
Vulnerabilities
No vulnerabilities reported
Install design-pattern
You can use design-pattern like any standard Java library. Please include the the jar files in your classpath. You can also use any IDE and you can run and debug the design-pattern component as you would do with any other Java program. Best practice is to use a build tool that supports dependency management such as Maven or Gradle. For Maven installation, please refer maven.apache.org. For Gradle installation, please refer gradle.org .
Support
Reuse Trending Solutions
Find, review, and download reusable Libraries, Code Snippets, Cloud APIs from over 650 million Knowledge Items
Find more librariesStay Updated
Subscribe to our newsletter for trending solutions and developer bootcamps
Share this Page