• Trang chủ
  • Tin công nghệ
    sublime-text-3

    SublimeText: 10 plugin hổ trợ JavaScript

    Hướng dẫn sử dụng Layout trong Android và thiết kế giao diện hổ trợ nhiều loại màn hình

    Những tính năng mới trong C# 7

    Hướng dẫn sử dụng Layout trong Android và thiết kế giao diện hổ trợ nhiều loại màn hình

    Những tính năng mới trong C# 6

    5 Design Pattern mà developer nên biết

    5 Design Pattern mà developer nên biết

    Live Stream và những điều có thể bạn chưa biết

    Live Stream và những điều có thể bạn chưa biết

    10 ngôn ngữ lập trình được sử dụng nhiều nhất để đóng góp mã nguồn mở

    10 ngôn ngữ lập trình được sử dụng nhiều nhất để đóng góp mã nguồn mở

    Machine Learning góp phần cải thiện chiến lược Digital Marketing của bạn như thế nào?

    Machine Learning góp phần cải thiện chiến lược Digital Marketing của bạn như thế nào?

    7 công nghệ nổi bật phát triển mạnh năm 2018

    7 công nghệ nổi bật phát triển mạnh năm 2018

    Bitcoin đã được khai thác 80% tổng lượng

    Bitcoin đã được khai thác 80% tổng lượng

  • Lập trình Android
  • Java & Java EE
  • Thiết kế web
    Hướng dẫn thêm nút chia sẻ ZALO cho website

    Hướng dẫn thêm nút chia sẻ ZALO cho website

    sublime-text-3

    SublimeText: 10 plugin hổ trợ JavaScript

    sublime-text-3

    Sublime Text 3 và các plugin cần thiết cho lập trình Laravel

    Top xu hướng thiết kế web cho năm 2017

    Top xu hướng thiết kế web cho năm 2017

    Tạo Layout đơn giản với DIV và CSS

    Tạo Layout đơn giản với DIV và CSS

    Tạo ứng dụng Swing bằng Netbean

    Backlink là gì? Cách tạo backlink?

    Tạo ứng dụng Swing bằng Netbean

    Giới thiệu về HTML5 và CSS3

  • Lập trình C#
    Hướng dẫn sử dụng Layout trong Android và thiết kế giao diện hổ trợ nhiều loại màn hình

    Tag Helpers trong ASP.NET Core MVC

    Hướng dẫn sử dụng Layout trong Android và thiết kế giao diện hổ trợ nhiều loại màn hình

    Những tính năng mới trong C# 7

    Hướng dẫn sử dụng Layout trong Android và thiết kế giao diện hổ trợ nhiều loại màn hình

    Những tính năng mới trong C# 6

    Hướng dẫn sử dụng Crystal Report với Visual Studio

    Hướng dẫn sử dụng Crystal Report với Visual Studio

    7 thủ thuật Windows Group Policy trong Windows 10

    7 thủ thuật Windows Group Policy trong Windows 10

    5 cách để học lập trình nhanh hơn

    Ví dụ minh họa Client-Server trong C#

    Remotting

    Remotting

    Debug chương trình với VS.NET

    Debug chương trình với VS.NET

    Tạo Form có hình dạng bất kỳ trong C#

    Tạo Form có hình dạng bất kỳ trong C#

  • Lập trình PHP
    php-mysql

    Sử dụng mệnh đề WHERE của câu lệnh SELECT trong PHP và MySQL

    php-mysql

    Sử dụng câu lệnh SELECT trong PHP và MySQL

    php-mysql

    Lấy giá trị của cột tự tăng của record vừa được thêm mới

    php-mysql

    MySQL prepared statements trong PHP

    php-mysql

    Sử dụng INSERT trong MySQL & PHP

    php-mysql

    Tạo cơ sở dữ liệu và bảng trong MySQL bằng PHP

    sublime-text-3

    Sublime Text 3 và các plugin cần thiết cho lập trình Laravel

    WordPress-Cách chia bài viết dài thành nhiều trang

    WordPress-Làm nổi bật comment của tác giả bài viết

No Result
View All Result
Học Lập Trình
  • Trang chủ
  • Tin công nghệ
    sublime-text-3

    SublimeText: 10 plugin hổ trợ JavaScript

    Hướng dẫn sử dụng Layout trong Android và thiết kế giao diện hổ trợ nhiều loại màn hình

    Những tính năng mới trong C# 7

    Hướng dẫn sử dụng Layout trong Android và thiết kế giao diện hổ trợ nhiều loại màn hình

    Những tính năng mới trong C# 6

    5 Design Pattern mà developer nên biết

    5 Design Pattern mà developer nên biết

    Live Stream và những điều có thể bạn chưa biết

    Live Stream và những điều có thể bạn chưa biết

    10 ngôn ngữ lập trình được sử dụng nhiều nhất để đóng góp mã nguồn mở

    10 ngôn ngữ lập trình được sử dụng nhiều nhất để đóng góp mã nguồn mở

    Machine Learning góp phần cải thiện chiến lược Digital Marketing của bạn như thế nào?

    Machine Learning góp phần cải thiện chiến lược Digital Marketing của bạn như thế nào?

    7 công nghệ nổi bật phát triển mạnh năm 2018

    7 công nghệ nổi bật phát triển mạnh năm 2018

    Bitcoin đã được khai thác 80% tổng lượng

    Bitcoin đã được khai thác 80% tổng lượng

  • Lập trình Android
  • Java & Java EE
  • Thiết kế web
    Hướng dẫn thêm nút chia sẻ ZALO cho website

    Hướng dẫn thêm nút chia sẻ ZALO cho website

    sublime-text-3

    SublimeText: 10 plugin hổ trợ JavaScript

    sublime-text-3

    Sublime Text 3 và các plugin cần thiết cho lập trình Laravel

    Top xu hướng thiết kế web cho năm 2017

    Top xu hướng thiết kế web cho năm 2017

    Tạo Layout đơn giản với DIV và CSS

    Tạo Layout đơn giản với DIV và CSS

    Tạo ứng dụng Swing bằng Netbean

    Backlink là gì? Cách tạo backlink?

    Tạo ứng dụng Swing bằng Netbean

    Giới thiệu về HTML5 và CSS3

  • Lập trình C#
    Hướng dẫn sử dụng Layout trong Android và thiết kế giao diện hổ trợ nhiều loại màn hình

    Tag Helpers trong ASP.NET Core MVC

    Hướng dẫn sử dụng Layout trong Android và thiết kế giao diện hổ trợ nhiều loại màn hình

    Những tính năng mới trong C# 7

    Hướng dẫn sử dụng Layout trong Android và thiết kế giao diện hổ trợ nhiều loại màn hình

    Những tính năng mới trong C# 6

    Hướng dẫn sử dụng Crystal Report với Visual Studio

    Hướng dẫn sử dụng Crystal Report với Visual Studio

    7 thủ thuật Windows Group Policy trong Windows 10

    7 thủ thuật Windows Group Policy trong Windows 10

    5 cách để học lập trình nhanh hơn

    Ví dụ minh họa Client-Server trong C#

    Remotting

    Remotting

    Debug chương trình với VS.NET

    Debug chương trình với VS.NET

    Tạo Form có hình dạng bất kỳ trong C#

    Tạo Form có hình dạng bất kỳ trong C#

  • Lập trình PHP
    php-mysql

    Sử dụng mệnh đề WHERE của câu lệnh SELECT trong PHP và MySQL

    php-mysql

    Sử dụng câu lệnh SELECT trong PHP và MySQL

    php-mysql

    Lấy giá trị của cột tự tăng của record vừa được thêm mới

    php-mysql

    MySQL prepared statements trong PHP

    php-mysql

    Sử dụng INSERT trong MySQL & PHP

    php-mysql

    Tạo cơ sở dữ liệu và bảng trong MySQL bằng PHP

    sublime-text-3

    Sublime Text 3 và các plugin cần thiết cho lập trình Laravel

    WordPress-Cách chia bài viết dài thành nhiều trang

    WordPress-Làm nổi bật comment của tác giả bài viết

No Result
View All Result
Học Lập Trình
No Result
View All Result

Design Pattern – Adapter

qadmin by qadmin
24/04/2015
in Java & Java EE
0 0
0
Chuẩn C++11
0
SHARES
104
VIEWS
Share on FacebookShare on Twitter

Mẫu thiết Adapter giữ vai trò trung gian giữa hai lớp, chuyển đổi giao diện của một hay nhiều lớp có sẳn thành một giao diện khác, tương thích với lớp đang viết. Adapter giải quyết vấn đề không tương thích của hai giao diện, điều này cho phép các lớp có các giao diện khác nhau có thể dể dàng giao tiếp tốt với nhau thông qua giao diện chuyển tiếp trung gian, không cần thay đổi mã nguồn của lớp có sẳn cũng như lớp đang viết.
Mẫu thiết kế Adapter còn gọi là Wrapper do cung cấp một giao diện “bọc ngoài” tương thích cho một hệ thống có sẳn, hệ thống có sẳn này có dữ liệu và hành vi phù hợp nhưng có giao diện không tương thích với lớp đang viết.

1. Cài đặt

Có hai cách để cài đặt mẫu thiết kế Adapter:

– Tiếp hợp lớp (dùng thừa kế – inheritance): một lớp mới (Adapter) sẽ kế thừa lớp có sẳn với giao diện không tương thích (Adaptee), đồng thời cài đặt giao diện mà người dùng mong muốn (Target). Trong lớp mới, khi cài đặt các phương thức của giao diện người dùng mong muốn, phương thức này sẽ gọi các phương thức cần thiết mà nó thừa kế được từ lớp có giao diện không tương thích. Tiếp hợp lớp đơn giản nhưng dễ gặp trường hợp đụng độ (trùng) tên phương thức.

adapter1

– Tiếp hợp đối tượng (dùng tích hợp – composition): một lớp mới (Adapter) sẽ tham chiếu đến một (hoặc nhiều) đối tượng của lớp có sẳn với giao diện không tương thích (Adaptee), đồng thời cài đặt giao diện mà người dùng mong muốn (Target). Trong lớp mới này, khi cài đặt các phương thức của giao diện người dùng mong muốn, sẽ gọi phương thức cần thiết thông qua đối tượng thuộc lớp có giao diện không tương thích. Tiếp hợp lớp tránh được vấn đề đa thừa kế, không có trong các ngôn ngữ hiện đại (Java, C#).

adapter2

Các thành phần tham gia:

  • Target: định nghĩa giao diện Client đang làm việc (phương thức request()).
  • Adaptee: định nghĩa giao diện không tương thích (phương thức adaptedOperation()), cần được tiếp hợp để sử dụng được.
  • Adapter: lớp tiếp hợp, giúp giao diện đang làm việc tiếp hợp được với giao diện không tương thích. Cài đặt phương thức request() bằng cách gọi adaptedOperation() của Adaptee. Adapter có thể chứa mã bổ sung để phù hợp với nhu cầu của Client.
package demoadapter;

interface Target {
    String estimate(int i);
}

class Adaptee {
    public double precise(double a, double b) {
        System.out.println("Old lib::precise");
        return a/b;
    }
}

class Adapter extends Adaptee implements Target {

    @Override
    public String estimate(int i) {
        return String.valueOf(Math.round(precise(i, 3)));
    }
    
}
public class DemoAdapter {

    public static void main(String[] args) {
        System.out.println("--- Adapter Pattern ---");
        Target target = new Adapter();
        System.out.println(target.estimate(5));
    }    
}

DemoAdapter định gọi phương thức Adaptee.precise() nhưng không thực hiện được do khác danh sách tham số. Adapter giải quyết vấn đề này: phương thức Adapter.estimate() có signature phù hợp với lời gọi của DemoAdapter, và khi thực thi nó chuyển tiếp lời gọi đến phương thức Adapteee.precise(). Adapter chỉ đóng vai trò chuyển đổi giao diện, nó ủy nhiệm cho Adaptee thực hiện lời gọi.

2. Liên quan:

– Bridge: có cấu trúc tương tự, nhưng mục tiêu khác (tách một giao diện khỏi phần cài đặt).

– Decorator: bổ sung thêm chức năng nhưng không làm thay đổi giao diện, trong mẫu thiết kế Decorator, một Adapter sẽ phối hợp hai đối tượng khác nhau.

– Proxy: Định nghĩa một giao diện đại diện cho các đối tượng khác mà không làm thay đổi giao diện của các đối tượng được đại diện, điều này thực hiện được nhờ các Adapter.

3. Java API

Mẫu thiết kế Adapter được dùng phổ biến trong Java AWT (WindowAdapter, ComponentAdapter, ContainerAdapter, FocusAdapter, KeyAdapter, MouseAdapter và MouseMotionAdapter), …
Ví dụ: giao diện WindowListener có 7 phương thức. Khi listener của ta cài đặt giao diện này, cần phải cài đặt tất cả 7 phương thức xử lý sự kiệ, dù một số phương thức chỉ cài đặt rỗng do không dùng đến loại sự kiện đó. Lớp WindowAdapter cài đặt giao diện WindowListener, cài đặt sẵn và rỗng cả 7 phương thức. Như vậy nếu lớp listener của ta thừa kế từ lớp WindowAdapter, chỉ cần override những phương thức quan tâm.

4. Sử dụng

Ta muốn:

  • Sử dụng một lớp đã tồn tại trước đó nhưng giao diện sử dụng không phù hợp như mong muốn, ta lại không có mã nguồn để sửa đổi giao diện đó.
  • Sử dụng một lớp, nhưng lớp này được tạo ra với mục đích sử dụng chung, nên không phù hợp cho việc tạo một giao diện đặc thù.
  • Có sự chuyển đổi giao diện từ nhiều nguồn khác nhau.
  • Tiếp hợp nhiều đối tượng cùng một lúc, nhưng giao diện mong muốn không phải là interface mà là một lớp trừu tượng.
Tags: codedesign patternhocjavalap trinhprogrammingtutorial
Previous Post

Design Pattern – Singleton

Next Post

Tiếp tục tổ chức Trại hè công nghệ thông tin SaigonTech

qadmin

qadmin

Related Posts

5 Design Pattern mà developer nên biết

5 Design Pattern mà developer nên biết

30/07/2020

Link download ebook Data Structures and Algorithms in Java

04/04/2017
5 cách để học lập trình nhanh hơn

Một số tính năng mới của Java 8

05/01/2017
5 cách để học lập trình nhanh hơn

link download ebook Hands on Database

04/01/2017
5 cách để học lập trình nhanh hơn

Link download sách java của Prentice

03/01/2017
5 cách để học lập trình nhanh hơn

Java cơ bản

02/01/2017
Next Post
Tiếp tục tổ chức Trại hè công nghệ thông tin SaigonTech

Tiếp tục tổ chức Trại hè công nghệ thông tin SaigonTech

Trả lời Hủy

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

You might also like

Hướng dẫn thêm nút chia sẻ ZALO cho website

Hướng dẫn thêm nút chia sẻ ZALO cho website

08/07/2021
sublime-text-3

SublimeText: 10 plugin hổ trợ JavaScript

16/01/2021
Hướng dẫn sử dụng Layout trong Android và thiết kế giao diện hổ trợ nhiều loại màn hình

Tag Helpers trong ASP.NET Core MVC

13/12/2020
Hướng dẫn sử dụng Layout trong Android và thiết kế giao diện hổ trợ nhiều loại màn hình

Những tính năng mới trong C# 7

03/12/2020
Hướng dẫn sử dụng Layout trong Android và thiết kế giao diện hổ trợ nhiều loại màn hình

Những tính năng mới trong C# 6

03/12/2020
php-mysql

Sử dụng mệnh đề WHERE của câu lệnh SELECT trong PHP và MySQL

13/11/2020
Học Lập Trình

Code5s.com được xây dựng với mong muốn mang lại những bài học hữu ích, thiết thực, và chất lượng cho mọi người.

Chuyên mục

Công cụ Java & Java EE Lập trình Android Lập trình C# Lập trình PHP Thiết kế web Tin công nghệ Tips Tài liệu Wearable Web Services XML

Kết nối

  • Trang chủ
  • Tin công nghệ
  • Lập trình Android
  • Java & Java EE
  • Thiết kế web
  • Lập trình C#
  • Lập trình PHP

© 2020 Code5s.com

No Result
View All Result
  • Trang chủ
  • Tin công nghệ
  • Lập trình Android
  • Java & Java EE
  • Thiết kế web
  • Lập trình C#
  • Lập trình PHP

© 2020 Code5s.com

Welcome Back!

Login to your account below

Forgotten Password?

Create New Account!

Fill the forms bellow to register

All fields are required. Log In

Retrieve your password

Please enter your username or email address to reset your password.

Log In