Saturday, April 1, 2023
Learning Code
  • Home
  • JavaScript
  • Java
  • Python
  • Swift
  • C++
  • C#
No Result
View All Result
  • Home
  • JavaScript
  • Java
  • Python
  • Swift
  • C++
  • C#
No Result
View All Result
Learning Code
No Result
View All Result
Home Java

Venkat Subramaniam Brings a Contemporary Twist to GoF Design Patterns With Modern Java at Devoxx BE

learningcode_x1mckf by learningcode_x1mckf
October 15, 2022
in Java
0
Venkat Subramaniam Brings a Contemporary Twist to GoF Design Patterns With Modern Java at Devoxx BE
74
SHARES
1.2k
VIEWS
Share on FacebookShare on Twitter


You might also like

So why did they decide to call it Java? – InfoWorld

Senior Java Developer – IT-Online

West Java to provide simultaneous polio vaccinations from Apr 3 – ANTARA English

The GoF Design Patterns revealed again in 1998, qualifies as a traditional of pc science as it’s nonetheless being taught each in universities but in addition beneficial as greatest apply within the business. In his deep dive session from Devoxx, Venkat Subramaniam gave them a up to date twist, by implementing Iterator, Strategy, Decorator or Factory Method with trendy Java.

Within the introduction of his talk, Venkat considers the e-book authors to be grandfathers of software program growth and their design patterns with grandma’s recipes: even in case you have them, you will be unable to breed the dish. So, he considers that design patterns are phenomenal as a communication device, however a catastrophe as a software program design device.

The next are normal patterns that we may meet in our day-to-day coding, which he made a bit extra fluent all in his energetic and joyful method.

The iterator sample modified rather a lot on account of Java’s embrace of useful programming. One of many greatest modifications was the shift from an exterior iterator to an inside iterator, which got here with Java’s useful API. With this modification, you may evolve from utilizing the verbose crucial model iteration


int rely = 0;
for(var title: names) 
   if(title.size() == 4) 
     System.out.println(title.toUpperCase());
	 rely++;

     if(rely == 2) 
        break;
     
   
  
}

to the fluent useful iteration:


names.stream()
     .filter(title -> title.size() == 4)
     .map(String::toString)
     .restrict(2)
     .forEach(System.out::println);

 

The limit(long) and takeWhile(Predicate<? super T>) (added in Java 9) are the useful equivalents of continue and break statements, the primary one taking only a numerical restrict, whereas the second utilizing an expression.

Even when Java’s useful API is a part of the JDK for nearly a decade already, there are nonetheless widespread errors that linger within the code bases. The one that may make the outcomes of iteration operations unpredictable(particularly in parallel executions) is when the useful pipeline is *not* pure (it modifications or relies on any state seen from the skin).

Light-weight technique – the place we need to differ a small a part of an algorithm whereas preserving the remainder of the algorithm the identical. Traditionally, the sample was carried out by having a way that takes a single methodology interface as a parameter that has a number of implementations for every of the methods to be carried out. As methods are sometimes a single methodology or perform. So, useful interfaces and lambdas work rather well. 

Despite the fact that nameless lessons represented an implementation mechanism, useful interfaces(Predicate<? super T> is an efficient candidate) or lambdas make the code much more fluent and simpler to understand. In trendy Java, Technique is extra of a characteristic than a sample that requires important effort to implement.


public class Pattern 
  public static int totalValues(Checklist<Integer> numbers) 
    int whole = 0;

    for(var quantity: numbers) 
      whole += quantity;
    

    return  whole;
  

  public static int totalEvenValues(Checklist<Integer> numbers) 
    int whole = 0;

    for(var quantity: numbers) 
      if(quantity % 2 == 0)  whole += quantity; 
    

    return  whole;
  

  public static int totalOddValues(Checklist<Integer> numbers) 
    int whole = 0;

    for(var quantity: numbers) 
      if(quantity % 2 != 0)  whole += quantity; 
    

    return  whole;
  


  public static void primary(String[] args) 
    var numbers = Checklist.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

    System.out.println(totalValues(numbers));
    System.out.println(totalEvenValues(numbers));
    System.out.println(totalOddValues(numbers));
  


The extra trendy take can be to make use of a lambda for the technique: 


import java.util.perform.Predicate;

public class Pattern 
  public static int totalValues(Checklist<Integer> numbers,
    Predicate<Integer> selector) 
    int whole = 0;

    for(var quantity: numbers) 
      if(selector.check(quantity)) 
        whole += quantity;
      
    

    return  whole;
  

  public static boolean isOdd(int quantity) 
    return quantity % 2 != 0;
  

  public static void primary(String[] args) 
    var numbers = Checklist.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

    System.out.println(totalValues(numbers, ignore -> true));
    System.out.println(totalValues(numbers, 
      quantity -> quantity % 2 == 0));

    System.out.println(totalValues(numbers, Pattern::isOdd));
  


 

Manufacturing facility methodology utilizing default strategies

Within the introduction to the manufacturing facility methodology implementation, Venkat said the next:

What’s the worst key phrase in Java from the polymorphism standpoint? […] Despite the fact that last, instanceof and static are good candidates for this, they’re mininions. new is the mafia of all of them.

A number of patterns (creational patterns), frameworks(Spring, Guice) or methods had been conceived with the intention to tackle the “evilness” of recent, its lack of polymorphism assist and its tight coupling. Impressed by Ruby’s polymorphic skill to create completely different objects based mostly on context, Venkat proposes an implementation of the manufacturing facility methodology sample through the use of Java’s default keyword. This method would permit one to utilize interfaces and really small implementing lessons, making the code simpler to observe.


import java.util.*;

interface Pet 
class Canine implements Pet 
class Cat implements Pet 

interface Particular person 
  Pet getPet();

  default void play() 
    System.out.println("enjoying with " + getPet());
  


class DogPerson implements Particular person 
  personal Canine canine = new Canine();

  public Pet getPet()  return canine; 


class CatLover implements Particular person 
  personal Cat cat = new Cat();
  public Pet getPet()  return cat; 


public class Pattern 
  public static void name(Particular person individual) 
    individual.play();
  

  public static void primary(String[] args) 
    name(new DogPerson());
    name(new CatLover());
  

 

Decorator

Even when the decorator sample is theoretically well-known by many programmers, few really carried out it in apply. Most likely probably the most notorious instance of its implementation is the development of io packages. Venkat proposes a special method to this sample, based mostly on the features composability: through the use of the identity function and andThen(Function<? super R,? extends V> ) he has the power to construct easy, fluent mechanisms that improve the talents of an object.

 


class Digital camera 
  personal Perform<Coloration, Coloration> filter;

  public Digital camera(Perform<Coloration, Coloration>... filters) 
    filter = Stream.of(filters)
      .scale back(Perform.identification(), Perform::andThen);
  

  public Coloration snap(Coloration enter) 
    return filter.apply(enter);
  


public class Pattern 
  public static void print(Digital camera digital camera) 
    System.out.println(digital camera.snap(new Coloration(125, 125, 125)));
  

  public static void primary(String[] args) 
    print(new Digital camera());

    print(new Digital camera(Coloration::brighter));
    print(new Digital camera(Coloration::darker));

    print(new Digital camera(Coloration::brighter, Coloration::darker));
  


 

Even when the patterns appear to be eternally younger, as Venkat Subramaniam mentioned during his talk: “Design patterns usually kick in to fill the gaps of a programming language. The extra highly effective a language is, the much less we speak about design patterns as these naturally turn into the options of the language.”

Along with the evolution of programming languages and of our expertise evolve additionally the patterns as time goes on. A few of them are absorbed as options of the languages, others had been deemed out of date and others are simpler to implement. No matter which class your favorite falls into, Venkat suggests utilizing them as communication means and letting the code evolve in the direction of them. Additionally, he recommends experimenting with a number of programming languages, as a strategy to make your coding extra fluent.





Source link

Share30Tweet19
learningcode_x1mckf

learningcode_x1mckf

Recommended For You

So why did they decide to call it Java? – InfoWorld

by learningcode_x1mckf
April 1, 2023
0
Google expands open source bounties, will soon support Javascript fuzzing too – ZDNet

So why did they decide to call it Java?  InfoWorld Source link

Read more

Senior Java Developer – IT-Online

by learningcode_x1mckf
April 1, 2023
0
Google expands open source bounties, will soon support Javascript fuzzing too – ZDNet

Senior Java Developer  IT-On-line Source link

Read more

West Java to provide simultaneous polio vaccinations from Apr 3 – ANTARA English

by learningcode_x1mckf
April 1, 2023
0
Google expands open source bounties, will soon support Javascript fuzzing too – ZDNet

West Java to provide simultaneous polio vaccinations from Apr 3  ANTARA English Source link

Read more

COBOL programming skills gap thwarts modernization to Java – TechTarget

by learningcode_x1mckf
April 1, 2023
0
Google expands open source bounties, will soon support Javascript fuzzing too – ZDNet

COBOL programming skills gap thwarts modernization to Java  TechTarget Source link

Read more

User input with a Java JOptionPane example – TheServerSide.com

by learningcode_x1mckf
April 1, 2023
0
Google expands open source bounties, will soon support Javascript fuzzing too – ZDNet

User input with a Java JOptionPane example  TheServerSide.com Source link

Read more
Next Post
Should You Consider Microsoft 98-382 Certification Exam; Why Is Javascript Important as a Developer?

Should You Consider Microsoft 98-382 Certification Exam; Why Is Javascript Important as a Developer?

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Related News

Google expands open source bounties, will soon support Javascript fuzzing too – ZDNet

Developers Warned of Critical Remote Code Execution Flaw in Quarkus Java Framework – SecurityWeek

March 5, 2023
Deno team promises npm compatibility and ‘fastest JavaScript runtime web server ever built’ • DEVCLASS

Deno team promises npm compatibility and ‘fastest JavaScript runtime web server ever built’ • DEVCLASS

September 11, 2022
Java Developer at Datafin Recruitment – Western Cape Cape Town

Java Developer at Datafin Recruitment – Western Cape Cape Town

October 30, 2022

Browse by Category

  • C#
  • C++
  • Java
  • JavaScript
  • Python
  • Swift

RECENT POSTS

  • So why did they decide to call it Java? – InfoWorld
  • Senior Java Developer – IT-Online
  • 4 Packages for Working With Date and Time in JavaScript – MUO – MakeUseOf

CATEGORIES

  • C#
  • C++
  • Java
  • JavaScript
  • Python
  • Swift

© 2022 Copyright Learning Code

No Result
View All Result
  • Home
  • JavaScript
  • Java
  • Python
  • Swift
  • C++
  • C#

© 2022 Copyright Learning Code

Are you sure want to unlock this post?
Unlock left : 0
Are you sure want to cancel subscription?