Java

Duyệt các bài viết được gắn thẻ Java

106 bài viết

Bridge Pattern trong Java – Code ví dụ Composite Pattern

Bridge Pattern trong Java – Code ví dụ Composite Pattern

Bài viết được sự cho phép của tác giả Trần Hữu Cương 1. Bridge Pattern là gì? Bridge Pattern là một mẫu cấu trúc ( Structural Pattern ). Bridge Pattern được dùng khi có sự phân cấp giao diện trong cả thành phần interface lẫn thành phần implement nó. 2. Bridge Pattern UML Diagram Hướng dẫn Java Design Pattern – DAO Hệ thống 23 mẫu Design Patterns 3. Ví dụ Ta có 1 tin nhắn với 2 cách log là ghi ra file và show ra màn hình mỗi cách lại được thực hiện làm 2 kiểu là thực hiện với kết quả là text rõ hoặc text đã được mã hóa. Message: là 1 lớp trừu tượng khai báo chức năng log MessageLogger: là 1 interface thực thi chức năng log của Message ConsoleLogger: thừa kế MessageLogger, có chức năng show message ra console FileLogger: thừa kế MessageLogger, có chức năng ghi message vào file TextMessage và EncryptedMessage: thừa kế Message, quyết định xem việc log tin nhắn là text rõ hoặc text đã được mã hóa. Tham khảo việc làm Fresher Java mới nhất trên Station D Code ví dụ: MessageLogger.java public interface MessageLogger { public void log ( String msg ) ; } ConsoleLogger.java public class ConsoleLogger implements MessageLogger { @Override public void log ( String msg ) { System . out . println ( msg ) ; } } Xem tin tuyển dụng Java mới nhất trên Station D FileLogger.java public class FileLogger implements MessageLogger { @Override public void log ( String msg ) { // viet ham ghi ra file log.txt try { FileWriter fw = new FileWriter ( new File ( "log.txt" ) , true ) ; fw. append ( ( char ) 10 ) ; fw. write ( msg ) ; fw. close...

By stationd
Giới thiệu Java Service Provider Interface (SPI) – Tạo các ứng dụng Java dễ mở rộng

Giới thiệu Java Service Provider Interface (SPI) – Tạo các ứng dụng Java dễ mở rộng

Bài viết được sự cho phép của tác giả Nguyễn Hữu Khanh Hầu hết vòng đời của một ứng dụng xoay quanh việc bảo trì. Một ứng dụng có thể mở rộng cho phép bảo trì dễ dàng, tức là nâng cấp một tính năng mà không ảnh hưởng đến toàn bộ ứng dụng. Trong bài viết này chúng ta sẽ tìm hiểu về Java Service Provider Interface (SPI) và cách chúng ta có thể áp dụng nó vào trường hợp sử dụng thực tế để tạo các ứng dụng dễ dàng mở rộng, tạo ứng dụng theo các kiến trúc module, plugin. Các thành phần của Java Service Provider Interface (SPI) Một Service Provider framework là một hệ thống trong đó nhiều nhà cung cấp dịch vụ (Service Provider) implement một Service và hệ thống này cung cấp các implement cho client sử dụng. SPI giúp giảm kết dính và che dấu thông tin giữa các thành phần của ứng dụng. Java SPI định nghĩa các thành phần chính sau: Service : là một tập hợp các interface/ abstract class mà nó cung cấp quyền truy cập vào một số chức năng hoặc tính năng ứng dụng cụ thể. Service Provider Interface (SPI): là một tập hợp interface/ abstract hoạt động như một proxy hoặc điểm cuối (endpoint) cho service. Service Provider : là một triển khai cụ thể của SPI. Nó chứa một hoặc nhiều class cụ thể implements hoặc extends một Service. ServiceLoader : là thành phần không thể thiếu của SPI. Nó có vai trò tìm kiếm và load các implements khi được yêu cầu. Nó sử dụng context classpath để xác định vị trí các provider implement provider và lưu chúng vào cache để tăng performance. Bridge Pattern trong Java – Code ví dụ Composite...

By stationd
REST Web service: Tạo ứng dụng Java RESTful Client với Jersey Client 2.x

REST Web service: Tạo ứng dụng Java RESTful Client với Jersey Client 2.x

Bài viết được sự cho phép của tác giả Giang Phan Trong bài trước chúng ta đã cùng tìm hiểu cách xây dựng ứng dụng Java Restful web service với Jersey 1.x. Trong bài này, chúng ta sẽ cùng tìm hiểu cách tạo ra ứng dụng Java Restful web service với Jersey 2.x và ứng dụng Java RESTful Client sử dụng Jersey Client API để gọi tới RESTful web service. 4 tips học Java cơ bản nhanh nhất dành cho Beginner Developer 5 cách chia một mảng lớn thành nhiều mảng nhỏ trong Javascript Xem thêm tuyển dụng Java hấp dẫn trên Station D 1. Tạo Jersey project Trong bài trước chúng ta đã tạo Restful web service sử dụng Jersey version 1.x. Trong bài này, chúng ta sẽ tạo Jersey project với version 2.x. Jersey 1.x : các thư viện nằm trong package com.sun. Jersey 2.x : các thư viện nằm trong package org.glassfish. Vào Menu File -> New -> Dynamic Web Project -> Finish. Nhấn chuột phải lên project vừa tạo -> Configure -> Convert to Maven Project: Nhập thông tin Maven project như sau: Chúng ta có project như sau: Mở file pom.xml và cập nhật lại như sau: < project xmlns = "http://maven.apache.org/POM/4.0.0" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation = " http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd " > < modelVersion >4.0.0</ modelVersion > < groupId >RestfulWebServiceWithJersey2Example</ groupId > < artifactId >RestfulWebServiceWithJersey2Example</ artifactId > < version >0.0.1-SNAPSHOT</ version > < packaging >war</ packaging > < properties > < project.build.sourceEncoding >UTF-8</ project.build.sourceEncoding > < maven.compiler.source >1.8</ maven.compiler.source > < maven.compiler.target >1.8</ maven.compiler.target > < jersey.version >2.28</ jersey.version > < lombok.version >1.16.20</ lombok.version > </ properties > < dependencies > <!-- https://mvnrepository.com/artifact/org.glassfish.jersey.core/jersey-server --> < dependency > < groupId >org.glassfish.jersey.core</ groupId > < artifactId >jersey-server</ artifactId > < version >${jersey.version}</ version > </ dependency >...

By stationd
Lombok là gì? Sinh code tự động trên Eclipse – Intellij

Lombok là gì? Sinh code tự động trên Eclipse – Intellij

Bài viết được sự cho phép của tác giả Trần Hữu Cương 1. Lombok là gì? Lombok là một thư viện Java giúp tự sinh ra các hàm setter/getter, hàm khởi tạo, toString… và tinh gọn chúng. Thực tế thì hầu hết các IDE hiện này đều hỗ trợ sinh code tự động ví dụ như trên eclipse ta click chuột phải vào file cần sinh code và chọn Source và chọn các method cần sinh r Tuy nhiên với những class có nhiều thuộc tính thì việc hiển thị các hàm getter/setter hay các hàm toString sẽ khiến cho class bị rối. Lombok sinh ra chính là để khắc phục những điểm đó. Ví dụ class không sử dụng lombok và class có sử dụng lombok: 2. Cài đặt Lombok Để sử dụng các annotation của Lombok ta cần sử dụng thư viện lombok: Sử dụng maven: <dependency > <groupId > org.projectlombok </groupId> <artifactId > lombok </artifactId> <version > 1.16.20 </version> <scope > provided </scope> </dependency> Hoặc download file lombok-1.16.20.jar Project Lombok là gì? Getter, Setter và Constructors với Project Lombok Sử dụng Lombok để rút gọn code trong Java Cài đặt plugin lombok cho IDE Với Intellij: vào File/Settings/Plugins và nhập lombok ở ô tìm kiếm và click install. Với Eclipse: ta click vào file lombok-1.16.20.jar hoặc chạy lệnh java -jar lombok-1.16.20.jar Trên giao diện cài đặt lombock, ta click button “Specify Location” và trỏ tới file eclipse.exe Sau khi cài đặt thành công ta sẽ thây lombok xuất hiện trong phần about của eclipse. Tuyển dụng lập trình viên Java lương cao 3. Code ví dụ với lombok Đầu tiên là với annotion @Getter @Setter sẽ giúp sinh ra các method getter/setter Ngoài cách dùng annotation @Getter @Setter trước các field ta có thể dùng trước class...

By stationd
So sánh đối tượng với Comparable trong Java

So sánh đối tượng với Comparable trong Java

Java là một trong những ngôn ngữ lập trình phổ biến nhất hiện nay và có rất nhiều tính năng hữu ích. Trong bài viết này, hãy cùng Station D tìm hiểu về giao diện Comparable trong Java và cách sử dụng nó để so sánh các đối tượng với nhau. Tìm hiểu về Comparable trong Java Comparable là một giao diện trong Java cung cấp khả năng so sánh các đối tượng với nhau. Nó được sử dụng để so sánh các đối tượng dựa trên một thứ tự được chỉ định. Bằng cách triển khai giao diện Comparable, bạn có thể so sánh các đối tượng của một lớp được xác định trước với nhau. Điểm khác biệt giữa Comparable và Comparator trong Java là Comparable được sử dụng để so sánh các đối tượng của cùng một lớp, trong khi Comparator được sử dụng để so sánh các đối tượng của các lớp khác nhau. Điều này có nghĩa là khi sử dụng Comparable, bạn chỉ có thể so sánh các đối tượng của lớp Student với nhau, trong khi khi sử dụng Comparator, bạn có thể so sánh các đối tượng của lớp Student với các đối tượng của lớp khác như Teacher hay Employee. Cách sử dụng Comparable trong Java Để sử dụng Comparable trong Java, bạn cần thực hiện các bước sau: Triển khai giao diện Comparable: Trong lớp của bạn, triển khai giao diện Comparable trong đó ClassName là tên lớp của bạn. Ghi đè phương thức compareTo(): Cung cấp logic so sánh trong phương thức compareTo(). Phương thức này phải trả về một số nguyên âm, dương hoặc không âm, biểu thị thứ tự của đối tượng hiện tại so với tham số đã truyền. Java tuyển dụng lương cao, đãi ngộ...

By stationd
Sử dụng List để quản lý dữ liệu trong Java

Sử dụng List để quản lý dữ liệu trong Java

Trong lập trình, việc quản lý dữ liệu là một phần quan trọng và không thể thiếu. Và trong Java , List là một trong những cấu trúc dữ liệu quan trọng nhất để lưu trữ và quản lý các bộ sưu tập các phần tử cùng kiểu dữ liệu. Trong bài viết này, hãy cùng Station D tìm hiểu về cách sử dụng List trong Java và các tính năng quan trọng của nó. Cách sử dụng List trong Java List là một trong những cấu trúc dữ liệu phổ biến nhất trong Java và được sử dụng rộng rãi trong các ứng dụng thực tế. Nó cung cấp cho chúng ta một cách tiện lợi để lưu trữ và quản lý các phần tử theo thứ tự và dưới đây là một số cách chúng ta có thể sử dụng List trong Java: Lưu trữ danh sách các sản phẩm trong một cửa hàng trực tuyến. Quản lý danh sách các khách hàng của một công ty. Lưu trữ thông tin về các bài viết trên một trang blog. Quản lý danh sách các sinh viên trong một lớp học. Với những ví dụ trên, chúng ta có thể thấy rằng List là một công cụ hữu ích để quản lý các bộ sưu tập dữ liệu trong nhiều lĩnh vực khác nhau. Tìm hiểu về interface List trong Java Trong lập trình Java , List được biểu diễn bằng giao diện java.util.List. Điều này có nghĩa là chúng ta không thể tạo một đối tượng List trực tiếp mà phải sử dụng một trong hai triển khai của giao diện này: ArrayList hoặc LinkedList. Giao diện List cung cấp một số phương thức để thao tác với các phần tử trong danh sách. Chúng ta sẽ tìm...

By stationd
Những điểm mới của Java 8 (phần 5: Tham chiếu phương thức)

Những điểm mới của Java 8 (phần 5: Tham chiếu phương thức)

Bài viết được sự cho phép của smartjob.vn Từ phiên bản 8, lập trình viên Java có thể áp dụng kỹ thuật Tham chiếu phương thức (method reference). Trong những đoạn mã nguồn Java , khi bạn nhìn thấy ký hiệu :: (hai dấu hai chấm) thì đó chính là tham chiếu phương thức. 3 dạng của tham chiếu phương thức: – Phương thức tĩnh (static method) – Phương thức khởi tạo đối tượng (instance methods) – Constructor (“Constructor”: hàm tạo về bản chất cũng là phương thức) package vn.smartJob.java8features; import java.util.List; import java.util.ArrayList; public class Example1 { public static void main(String args[]) { List employeeList = new ArrayList(); employeeList.add("Bùi Đăng Trường"); employeeList.add("Nguyễn Tiến Mạnh"); employeeList.add("Nguyễn Văn Bình"); employeeList.add("Nguyễn Anh Dũng"); employeeList.add("Đỗ Văn Cường"); employeeList.forEach(System.out::println); } } // Kết quả: //run: //Bùi Đăng Trường //Nguyễn Tiến Mạnh //Nguyễn Văn Bình //Nguyễn Anh Dũng //Đỗ Văn Cường //BUILD SUCCESSFUL (total time: 0 seconds) Xem thêm các chương trình tuyển dụng Java hấp dẫn trên Station D Trong ví dụ trên, tại dòng 15, đã sử dụng kỹ thuật tham chiếu phương thức. Tham chiếu phương thức có thể kết hợp với Streams API giúp việc tăng tính linh hoạt (như chúng tôi đã trình bày trong phần 2). package vn.smartJob.java8features; import java.util.function.Supplier; public class Example2 { public static void main(String[] args) { String s = "SmartJob - Mạng tuyển dụng hàng đầu Việt Nam"; printResult(s::length); } public static void printResult(Supplier<Integer> supplier) { System.out.println(supplier.get()); } } // Kết quả: // 44 Download mã nguồn từ server SmartJob: Java8_method_reference hoặc clone/fork từ repository Github: https://github.com/SmartJobVN/java8 Đỗ Như Vý – Bài viết gốc được đăng tải tại smartjob.vn Có thể bạn quan tâm: Những điểm mới của Java 8 (phần 4: DateTime API) Những điểm mới của Java 8 (phần 6: Nashorn engine và...

By stationd
Tính trừu tượng (Abstraction) trong Java

Tính trừu tượng (Abstraction) trong Java

Trong lập trình hướng đối tượng, tính trừu tượng và tính kế thừa là hai khái niệm quan trọng và được sử dụng rộng rãi trong ngôn ngữ lập trình java . Tuy nhiên, nhiều người vẫn còn băn khoăn về sự khác biệt giữa hai khái niệm này và cách sử dụng chúng trong việc thiết kế và triển khai các ứng dụng. Trong bài viết này, hãy cùng Station D tìm hiểu về tính trừu tượng và tính kế thừa trong Java, từ đó có thể hiểu rõ hơn về sự khác biệt giữa hai khái niệm này và áp dụng chúng một cách hiệu quả nhé! Khái niệm về tính trừu tượng trong Java Trong lập trình hướng đối tượng, tính trừu tượng là một khái niệm quan trọng giúp mô hình hóa thế giới thực bằng cách ẩn đi các chi tiết triển khai bên trong của một đối tượng, chỉ tập trung vào hành vi và giao diện bên ngoài của đối tượng đó. Tính trừu tượng cho phép chúng ta xác định các lớp trừu tượng, các phương thức trừu tượng và các biến trừu tượng trong mã của chúng ta. Trong Java, tính trừu tượng được thể hiện thông qua từ khóa abstract. Một lớp trừu tượng là một lớp không thể khởi tạo; chỉ có thể được sử dụng để tạo các lớp con. Các phương thức trừu tượng là các phương thức không có phần thân, chỉ có phần khai báo, các phương thức trừu tượng phải được ghi đè trong các lớp con. Biến trừu tượng là các biến chưa được gán giá trị ban đầu và giá trị của chúng phải được gán trong các lớp con. Các đặc điểm của tính trừu tượng trong Java Để hiểu rõ...

By stationd
Cùng một công việc, Java đòi hỏi nhiều dòng code hơn Python?

Cùng một công việc, Java đòi hỏi nhiều dòng code hơn Python?

Vì sao những ngôn ngữ như Java đòi hỏi phải code nhiều hơn Python khi thực hiện cùng một công việc? Có rất nhiều lí do, nhưng đầu tiên thì tôi muốn nói rõ là tôi đã sử dụng Python một cách thành thạo được 10 năm rồi. Tôi không có vấn đề gì với Python cả, thậm chí tôi còn thấy nó rất tốt cho việc học. “Code dài hơn hơn khi thực hiện cùng một công việc” Đúng vậy. Nói chung là lập trình Java sẽ cần phải gõ nhiều hơn Python đấy. Nhưng nếu đó là vấn đề lớn với bạn, hãy kiếm IDE khác tốt hơn hoặc học cách đánh máy nhanh hơn. Code của Python ngắn gọn hơn, nhưng cái giá phải trả là gì? Cùng xem nhé… def getCustomer(id): Hàm này sẽ trả về gì nhỉ? Hay không trả về bất cứ gì cả? Biến “id” là kiểu gì? Số? Chuỗi? “CustomerID” object? Cùng xem Java nào… public CustomerRecord getCustomer(CustomerID id){ Số lượng code dài gấp đôi. Nhưng chúng ta có thể thấy rõ là hàm sẽ trả về kiểu nào, code làm gì trong đó. Những đoạn code của Java rõ ràng như những điều khoản được viết ra trong hợp đồng vậy. Đây điều mà Python không có. Tôi nghĩ là Python phù hợp cho việc học và có thể làm nhiều thứ cao cấp hơn nữa. Nhưng công việc gần nhất của tôi về Python đòi hỏi viết hơn 100,000 dòng code. Ứng tuyển các vị trí việc làm Java lương cao trên Station D Trong 100,000 dòng code đó, ví dụ mà tôi đưa ra ở trên sẽ xảy ra hơn 1000 lần, với hơn 1000 biến không xác định và hơn 1000 kết quả trả về cũng không xác...

By stationd
Record class trong Java

Record class trong Java

Bài viết được sự cho phép của tác giả Nguyễn Hữu Khanh Trong Java , khái niệm immutable dùng để chỉ những class mà đối tượng của chúng không bị thay đổi thông tin sau khi được khởi tạo. Bình thường, để khai báo một immutable class, chúng ta sẽ : Khai báo class này là final để không class nào extend được từ nó. Khai báo các fields của class đó là private và final, Không có các phương thức Setter mà chỉ có các phương thức Getter, Nếu một trong các fields của class đó là object thì khi lấy thông tin của field đó, chúng ta cần return copy của object đó. Ví dụ, nếu mình cần implement class Student với 2 thuộc tính là tên và tuổi, là immutable class, mình sẽ khai báo như sau: package com . huongdanjava . javaexample ; public final class Student { private final String name ; private final int age ; public Student ( String name , int age ) { this . name = name ; this . age = age ; } public String getName ( ) { return name ; } public int getAge ( ) { return age ; } } Mình đã giới thiệu với các bạn về Project Lombok , về lợi ích của nó trong việc giảm thiểu việc viết code cho những phương thức Getter, hay constructor, … khi khai báo một class. Với immutable class Student ở trên, chúng ta có thể viết lại với Project Lombok như sau: package com . huongdanjava . javaexample ; import lombok . AllArgsConstructor ; import lombok . Getter ; @Getter @AllArgsConstructor public final class Student { private final String name ; private final int age ; } Từ Java 14 trở đi, chúng...

By stationd