Saya akan mulai dengan hal pertama yang terlintas dalam pikiran. Sepertinya bukan pola, tapi terkadang Anda harus menggunakannya di OOP. Pertama, saya menulis contoh di java. Katakanlah kita perlu membuat kelas untuk dua jenis implementasi. Misalnya, kita perlu membuat kelas untuk terhubung ke situs melalui http dan https. Ini adalah contoh kecil, sebagai contoh, metode yang sama dapat digunakan saat Anda ingin menggambar untuk android di Opengl 2.0 es dan Opengl 3.0 es. Dalam hal ini, akan ada lebih banyak kode, dan jika Anda melakukannya dengan cara yang akan saya berikan, maka kode tersebut akan terlihat normal. Tetapi metode ini, tentu saja, tidak ditemukan oleh saya, saya sendiri terkadang membacanya dari buku. Dan https dan http. Untuk melakukan ini, Anda perlu membuat antarmuka. Dan tetapkan kelas yang diperlukan untuk antarmuka ini, tergantung pada jenis protokolnya. Saya tidak ingat persis, tapi sepertinya saya pernah membaca bahwa OOP menentukan otak.Ini memungkinkan Anda untuk menulis kode yang kompeten dan indah. Mungkin begitu. Tetapi saya hampir tidak memprogram dalam OOP, jadi mungkin saya menulis begitu banyak kode, tetapi programmer sejati akan membuat kode yang lebih ringkas. Tapi saya ingin menunjukkan sebuah contoh. Ini adalah antarmuka java.
import java.net.*;
import java.io.*;
interface IProtocol {
public void connect ( URL url );
public URLConnection getConnection ( ) throws IOException;
}
Di sini kami mendeklarasikan dua fungsi, satu untuk menghubungkan dan yang lainnya untuk mendapatkan URLConnection. Sekarang ada dua kelas agar ini berfungsi.
import java.net.*;
import java.io.*;
public class Http implements IProtocol {
public URL url;
public void connect ( URL url ) {
this.url = url;
}
public HttpURLConnection getConnection ( ) throws IOException {
return ( HttpURLConnection ) url.openConnection( );
}
}
import java.net.*;
import javax.net.ssl.*;
import java.io.*;
public class Https implements IProtocol {
public URL url;
public void connect ( URL url ) {
this.url = url;
}
public HttpsURLConnection getConnection ( ) throws IOException {
return ( HttpsURLConnection ) url.openConnection ( );
}
}
Berapa banyak kode yang Anda perlukan untuk menulis di connect dan getConnection tidak penting. Misal saya pilih sedikit kode, tapi bisa banyak, kalau misalnya buka program. Tapi itu nyaman. Jadi, fungsi utamanya tetap.
import java.net.*;
import java.io.*;
public class Main {
public static void main ( String[] args ) {
URL url = null;
try {
url = new URL ( "https://www.google.com" );
} catch ( MalformedURLException e ) {
return;
}
String protocol = url.getProtocol ( );
IProtocol prot = null;
switch ( protocol ) {
case "http": prot = new Http ( ); break;
case "https": prot = new Https ( ); break;
default: return;
}
prot.connect ( url );
URLConnection conn = null;
try {
conn = prot.getConnection ( );
} catch ( IOException e ) {
return;
}
conn.setDoOutput ( true );
}
}
Anda dapat menggunakan curl dalam C dan tidak menulis banyak kode, tetapi bagaimana contoh ini dapat diselesaikan menggunakan C? C memiliki petunjuk - itulah kekuatannya. Dan inilah contoh di C - fungsi utama. main.c
file
#include <stdio.h>
#include "conn.h"
struct conn conn;
#define HTTP_PROTOCOL 1
#define HTTPS_PROTOCOL 2
#define ERROR_PROTOCOL -1
static int get_protocol ( void ) {
return HTTP_PROTOCOL;
}
int main ( int argc, char **argv ) {
switch ( get_protocol ( ) ) {
case HTTP_PROTOCOL: init_http ( &conn ); break;
case HTTPS_PROTOCOL: init_https ( &conn ); break;
case ERROR_PROTOCOL: return -1;
}
conn.connect ( "www.google.com" );
char *data = conn.read ( );
}
Struktur conn dideklarasikan di file lain. samb.h
file
#ifndef __CONN__
#define __CONN__
struct conn {
void ( *connect ) ( const char *url );
char *( *read ) ( void );
};
void init_http ( struct conn *conn );
void init_https ( struct conn *conn );
#endif
Ada seluruh file cakupan yang dialokasikan untuk init_http, yang dibutuhkan untuk http.
mengajukan http.c
#include "conn.h"
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
static int sockfd;
static void connect_http ( const char *url ) {
sockfd = socket ( AF_INET, SOCK_STREAM, 0 );
}
static char *read_http ( void ) {
return NULL;
}
void init_http ( struct conn *conn ) {
conn->connect = connect_http;
conn->read = read_http;
}
Ssl juga diperlukan untuk init_https. Oleh karena itu, file ini akan berisi semua data yang diperlukan untuk koneksi ini.
file https.c
#include "conn.h"
#include <sys/types.h>
#include <sys/socket.h>
#include <openssl/ssl.h>
#include <stdio.h>
static int sockfd;
static SSL *ssl;
static void connect_https ( const char *url ) {
sockfd = socket ( AF_INET, SOCK_STREAM, 0 );
}
static char *read_https ( void ) {
return NULL;
}
void init_https ( struct conn *conn ) {
conn->connect = connect_https;
conn->read = read_https;
}
Jika Anda menyukai artikelnya, maka saya akan menulis sekuelnya di masa mendatang. Untuk saat ini, saya mungkin belum cukup memahami OOP untuk menulis lebih banyak contoh, tetapi menurut saya jika saya tidak melepaskan OOP, maka pembaca pemula akan tertarik untuk melihat perbedaannya saat menulis dalam pemrograman terstruktur dan OOP.