/**
* ドメイン非依存URL出力フィルタ
* javadrill.tech移行時はwp_options.home/siteurlのみ変更すればよい
*
* データベースには絶対URL(https://minner.asia)を保持し、
* 表示時に現在のドメイン(home_url())に動的変換する
*/
function javadrill_make_urls_dynamic($content) {
if (empty($content)) {
return $content;
}
// データベース内の絶対URLを現在のhome_url()に置換
$old_url = 'https://minner.asia';
$new_url = untrailingslashit(home_url());
// http版も対応(念のため)
$content = str_replace($old_url, $new_url, $content);
$content = str_replace('http://minner.asia', $new_url, $content);
return $content;
}
// 投稿本文、ウィジェット、タームの説明、抜粋に適用
add_filter('the_content', 'javadrill_make_urls_dynamic', 20);
add_filter('widget_text', 'javadrill_make_urls_dynamic', 20);
add_filter('term_description', 'javadrill_make_urls_dynamic', 20);
add_filter('get_the_excerpt', 'javadrill_make_urls_dynamic', 20);
ã“ã®ä¾‹ã§ã¯ã€ 「データベース連æºã®ãŸã‚ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã€ã¯ã€Javaプãƒã‚°ãƒ©ãƒ ãŒãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã¨ã‚„りå–りã™ã‚‹ãŸã‚ã®å…±é€šã®æŒ¯ã‚‹èˆžã„を定義ã™ã‚‹ãŸã‚ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã§ã™ã€‚ã“ã®ã‚ˆã†ãªã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスを使ã†ã“ã¨ã§ã€ç•°ãªã‚‹ç¨®é¡žã®ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ï¼ˆä¾‹: MySQLã€PostgreSQL)ã¨å¯¾è©±ã™ã‚‹ã‚¯ãƒ©ã‚¹ã‚’çµ±ä¸€çš„ãªæ–¹æ³•ã§ä½œæˆã§ãã¾ã™ã€‚ 以下ã¯è§£èª¬ã§ã™ï¼š ã“ã®ã‚ˆã†ãªãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹é€£æºã®ãŸã‚ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã¨å®Ÿè£…クラスã®çµ„ã¿åˆã‚ã›ã‚’使用ã™ã‚‹ã¨ã€ã‚¢ãƒ—ãƒªã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã®æ‹¡å¼µæ€§ãŒå‘上ã—ã€ç•°ãªã‚‹ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã¨ã®åˆ‡ã‚Šæ›¿ãˆãŒå®¹æ˜“ã«ãªã‚Šã¾ã™ã€‚// インターフェイスã®å®£è¨€
interface DatabaseConnection {
// データベースã¸ã®æŽ¥ç¶š
void connect();
// クエリã®å®Ÿè¡Œ
void executeQuery(String query);
// 接続を切æ–
void disconnect();
}
// MySQLデータベースを扱ã†ã‚¯ãƒ©ã‚¹
class MySQLDatabaseConnection implements DatabaseConnection {
@Override
public void connect() {
// MySQLデータベースã¸ã®æŽ¥ç¶šãƒã‚¸ãƒƒã‚¯
System.out.println("Connected to MySQL database.");
}
@Override
public void executeQuery(String query) {
// MySQLデータベースã§ã‚¯ã‚¨ãƒªã‚’実行ã™ã‚‹ãƒã‚¸ãƒƒã‚¯
System.out.println("Executing query in MySQL: " + query);
}
@Override
public void disconnect() {
// MySQLデータベースã‹ã‚‰åˆ‡æ–ã™ã‚‹ãƒã‚¸ãƒƒã‚¯
System.out.println("Disconnected from MySQL database.");
}
}
// PostgreSQLデータベースを扱ã†ã‚¯ãƒ©ã‚¹
class PostgreSQLDatabaseConnection implements DatabaseConnection {
@Override
public void connect() {
// PostgreSQLデータベースã¸ã®æŽ¥ç¶šãƒã‚¸ãƒƒã‚¯
System.out.println("Connected to PostgreSQL database.");
}
@Override
public void executeQuery(String query) {
// PostgreSQLデータベースã§ã‚¯ã‚¨ãƒªã‚’実行ã™ã‚‹ãƒã‚¸ãƒƒã‚¯
System.out.println("Executing query in PostgreSQL: " + query);
}
@Override
public void disconnect() {
// PostgreSQLデータベースã‹ã‚‰åˆ‡æ–ã™ã‚‹ãƒã‚¸ãƒƒã‚¯
System.out.println("Disconnected from PostgreSQL database.");
}
}
// メインクラス
public class Main {
public static void main(String[] args) {
// MySQLデータベースを扱ã†ã‚¯ãƒ©ã‚¹ã®åˆ©ç”¨ä¾‹
DatabaseConnection mysqlConnection = new MySQLDatabaseConnection();
mysqlConnection.connect();
mysqlConnection.executeQuery("SELECT * FROM users");
mysqlConnection.disconnect();
// PostgreSQLデータベースを扱ã†ã‚¯ãƒ©ã‚¹ã®åˆ©ç”¨ä¾‹
DatabaseConnection postgresConnection = new PostgreSQLDatabaseConnection();
postgresConnection.connect();
postgresConnection.executeQuery("SELECT * FROM employees");
postgresConnection.disconnect();
}
}DatabaseConnection インターフェイスを宣言ã—ã€ãれを実装ã™ã‚‹ MySQLDatabaseConnection ãŠã‚ˆã³ PostgreSQLDatabaseConnection クラスを作æˆã—ã¦ã„ã¾ã™ã€‚å„クラスã¯ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã¸ã®æŽ¥ç¶šã€ã‚¯ã‚¨ãƒªã®å®Ÿè¡Œã€æŽ¥ç¶šã®åˆ‡æ–ãªã©ã®æ“作を行ã†ãƒ¡ã‚½ãƒƒãƒ‰ã‚’æä¾›ã—ã¦ã„ã¾ã™ã€‚データベース連æºã®ãŸã‚ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイス
implements DatabaseConnection ã¨ã—ã¦ã€DatabaseConnection インターフェイスã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’実装ã—ã¾ã™ã€‚connect()ã€executeQuery(String query)ã€disconnect() メソッドをMySQLデータベースã«å¯¾å¿œã™ã‚‹ã‚ˆã†ã«å®Ÿè£…ã—ã¾ã™ã€‚
implements DatabaseConnection ã¨ã—ã¦ã€DatabaseConnection インターフェイスã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’実装ã—ã¾ã™ã€‚connect()ã€executeQuery(String query)ã€disconnect() メソッドをPostgreSQLデータベースã«å¯¾å¿œã™ã‚‹ã‚ˆã†ã«å®Ÿè£…ã—ã¾ã™ã€‚
DatabaseConnection インターフェイスを使用ã—ã¦ã€ç•°ãªã‚‹ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã¨å¯¾è©±ã™ã‚‹ãŸã‚ã®ã‚¯ãƒ©ã‚¹ã‚’作æˆãŠã‚ˆã³åˆ©ç”¨ã—ã¾ã™ã€‚MySQLDatabaseConnection 㨠PostgreSQLDatabaseConnection ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚’作æˆã—ã€connect()ã€executeQuery(String query)ã€disconnect() メソッドを呼ã³å‡ºã—ã¦ã€å„データベースã¨ã®ã‚„りå–りをシンプルã«è¡Œã„ã¾ã™ã€‚
ã“ã®å†…容ã«ã¤ã„ã¦JavaDrillã§å®Ÿéš›ã«æ‰‹ã‚’å‹•ã‹ã—ã¦å¦ç¿’ã§ãã¾ã™
// Drawable インターフェイスã®å®šç¾©
interface Drawable {
void draw();
}
// Circle クラスã®å®šç¾©
class Circle implements Drawable {
private int radius;
public Circle(int radius) {
this.radius = radius;
}
@Override
public void draw() {
System.out.println("Drawing a circle with radius: " + radius);
// ã“ã“ã«å††ã‚’æç”»ã™ã‚‹ãŸã‚ã®ã‚³ãƒ¼ãƒ‰ã‚’追åŠ
}
}
// Rectangle クラスã®å®šç¾©
class Rectangle implements Drawable {
private int width;
private int height;
public Rectangle(int width, int height) {
this.width = width;
this.height = height;
}
@Override
public void draw() {
System.out.println("Drawing a rectangle with width: " + width + " and height: " + height);
// ã“ã“ã«å››è§’形をæç”»ã™ã‚‹ãŸã‚ã®ã‚³ãƒ¼ãƒ‰ã‚’追åŠ
}
}
// Triangle クラスã®å®šç¾©
class Triangle implements Drawable {
private int base;
private int height;
public Triangle(int base, int height) {
this.base = base;
this.height = height;
}
@Override
public void draw() {
System.out.println("Drawing a triangle with base: " + base + " and height: " + height);
// ã“ã“ã«ä¸‰è§’形をæç”»ã™ã‚‹ãŸã‚ã®ã‚³ãƒ¼ãƒ‰ã‚’追åŠ
}
}
ã“ã®ä¾‹ã§ã¯ã€Drawable インターフェイス㌠draw メソッドをå«ã‚“ã§ãŠã‚Šã€ãれãžã‚Œã®å›³å½¢ã‚¯ãƒ©ã‚¹ãŒã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’オーãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã—ã¦ã„ã¾ã™ã€‚å„å›³å½¢ã‚¯ãƒ©ã‚¹ã¯æç”»ã«å¿…è¦ãªæƒ…å ±ã‚’æŒã¡ã€æç”»å‡¦ç†ãŒè¡Œã‚れるã¨ã‚³ãƒ³ã‚½ãƒ¼ãƒ«ã«å¯¾ã—ã¦ç°¡å˜ãªãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãŒè¡¨ç¤ºã•れã¾ã™ã€‚æç”»ã™ã‚‹ãŸã‚ã®å®Ÿéš›ã®ã‚³ãƒ¼ãƒ‰ã¯ã‚³ãƒ¡ãƒ³ãƒˆã§ç¤ºã•れã¦ã„る部分ã«è¿½åŠ ã•れるã“ã¨ãŒæœŸå¾…ã•れã¾ã™ã€‚
ã“ã®ä¾‹ã§ã¯ã€ã€ŒDrawableã€ã¨ã„ã†ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスを使用ã—ã¦ã€ç•°ãªã‚‹å›³å½¢ã®æç”»ã«å…±é€šã™ã‚‹ãƒ¡ã‚½ãƒƒãƒ‰ã€Œdrawã€ã‚’定義ã—ã¦ã„ã¾ã™ã€‚以下ã«ã€ã“ã®ä¾‹ã®è¦ç‚¹ã‚’解説ã—ã¾ã™ã€‚
Drawable インターフェイスã®å®šç¾©:
interface Drawable {
void draw();
}
Drawable インターフェイスã¯ã€draw メソッドをæŒã¤å˜ç´”ãªã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã§ã™ã€‚ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯å›³å½¢ã®æç”»ã‚’担当ã—ã¾ã™ã€‚
Circle クラスã®å®šç¾©:
class Circle implements Drawable {
// ... (コンストラクタã¨ãƒ—ライベート変数ãªã©)
@Override
public void draw() {
System.out.println("Drawing a circle with radius: " + radius);
// ã“ã“ã«å††ã‚’æç”»ã™ã‚‹ãŸã‚ã®ã‚³ãƒ¼ãƒ‰ã‚’追åŠ
}
}
Circle クラス㯠Drawable インターフェイスを実装ã—ã¦ã„ã¾ã™ã€‚
draw メソッドãŒã‚ªãƒ¼ãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã•れã€å††ã®æç”»å‡¦ç†ãŒè¿½åŠ ã•れã¦ã„ã¾ã™ã€‚
Rectangle クラスã®å®šç¾©:
class Rectangle implements Drawable {
// ... (コンストラクタã¨ãƒ—ライベート変数ãªã©)
@Override
public void draw() {
System.out.println("Drawing a rectangle with width: " + width + " and height: " + height);
// ã“ã“ã«å››è§’形をæç”»ã™ã‚‹ãŸã‚ã®ã‚³ãƒ¼ãƒ‰ã‚’追åŠ
}
}
Rectangle クラスも Drawable インターフェイスを実装ã—ã¦ã„ã¾ã™ã€‚
draw メソッドãŒã‚ªãƒ¼ãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã•れã€å››è§’å½¢ã®æç”»å‡¦ç†ãŒè¿½åŠ ã•れã¦ã„ã¾ã™ã€‚
Triangle クラスã®å®šç¾©:
class Triangle implements Drawable {
// ... (コンストラクタã¨ãƒ—ライベート変数ãªã©)
@Override
public void draw() {
System.out.println("Drawing a triangle with base: " + base + " and height: " + height);
// ã“ã“ã«ä¸‰è§’形をæç”»ã™ã‚‹ãŸã‚ã®ã‚³ãƒ¼ãƒ‰ã‚’追åŠ
}
}
Triangle クラスも Drawable インターフェイスを実装ã—ã¦ã„ã¾ã™ã€‚
draw メソッドãŒã‚ªãƒ¼ãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã•れã€ä¸‰è§’å½¢ã®æç”»å‡¦ç†ãŒè¿½åŠ ã•れã¦ã„ã¾ã™ã€‚
ã“ã®ã‚ˆã†ãªè¨è¨ˆã‚’採用ã™ã‚‹ã“ã¨ã§ã€ç•°ãªã‚‹ç¨®é¡žã®å›³å½¢ã‚’åŒã˜ Drawable インターフェイスã®ä¸€éƒ¨ã¨ã—ã¦çµ±ä¸€çš„ã«æ‰±ã†ã“ã¨ãŒã§ãã¾ã™ã€‚ã“れã¯ãƒãƒªãƒ¢ãƒ¼ãƒ•ィズムã®ä¸€ä¾‹ã§ã‚りã€å…±é€šã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスをæŒã¤ã‚ªãƒ–ジェクトãŒç•°ãªã‚‹ã‚¯ãƒ©ã‚¹ã§ç•°ãªã‚‹å‹•作をã™ã‚‹ã“ã¨ã‚’å¯èƒ½ã«ã—ã¾ã™ã€‚
「017 インターフェイスã€å•題集リスト
ã“ã®å†…容ã«ã¤ã„ã¦JavaDrillã§å®Ÿéš›ã«æ‰‹ã‚’å‹•ã‹ã—ã¦å¦ç¿’ã§ãã¾ã™
// Notification インターフェイス
interface Notification {
void sendNotification(String message);
}
// EmailNotification クラス
class EmailNotification implements Notification {
private String emailAddress;
public EmailNotification(String emailAddress) {
this.emailAddress = emailAddress;
}
@Override
public void sendNotification(String message) {
// メールé€ä¿¡ã®å®Ÿè£…
System.out.println("Sending email to " + emailAddress + ": " + message);
}
}
// SMSNotification クラス
class SMSNotification implements Notification {
private String phoneNumber;
public SMSNotification(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
@Override
public void sendNotification(String message) {
// SMS é€ä¿¡ã®å®Ÿè£…
System.out.println("Sending SMS to " + phoneNumber + ": " + message);
}
}
ã“ã®ä¾‹ã§ã¯ã€Notification インターフェイスã«ã¯ sendNotification メソッドãŒå«ã¾ã‚Œã¦ãŠã‚Šã€EmailNotification クラス㨠SMSNotification クラスã¯ãれを実装ã—ã¦ã„ã¾ã™ã€‚ãれãžã‚Œã®ã‚¯ãƒ©ã‚¹ã§ã¯ã€å…·ä½“çš„ãªé€šçŸ¥ã®é€ä¿¡æ‰‹æ®µã«åˆã‚ã›ã¦å®Ÿè£…ãŒè¡Œã‚れã¦ã„ã¾ã™ã€‚
通知機能ã®ãŸã‚ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスをè¨è¨ˆã™ã‚‹å ´åˆã€é€šçŸ¥ã‚’行ã†å…±é€šã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚„挙動を定義ã—ã¾ã™ã€‚以下ã«ã€Notification インターフェイスã®è§£èª¬ã‚’示ã—ã¾ã™ã€‚
// Notification インターフェイス
interface Notification {
void sendNotification(String message);
}
Notification インターフェイス: ã“ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã¯é€šçŸ¥ã®åŸºæœ¬çš„ãªæŒ™å‹•を定義ã—ã¦ã„ã¾ã™ã€‚
void sendNotification(String message): 通知をé€ä¿¡ã™ã‚‹ãŸã‚ã®ãƒ¡ã‚½ãƒƒãƒ‰ã§ã™ã€‚メッセージを引数ã¨ã—ã¦å—ã‘å–りã€å…·ä½“çš„ãªé€šçŸ¥ã®é€ä¿¡æ‰‹æ®µã¯å„クラスã§å®Ÿè£…ã—ã¾ã™ã€‚ã“ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスを実装ã™ã‚‹ã‚¯ãƒ©ã‚¹ï¼ˆä¾‹ï¼šEmailNotificationã€SMSNotification)ã§ã¯ã€sendNotification メソッドã®å…·ä½“çš„ãªå®Ÿè£…ãŒè¡Œã‚れã¾ã™ã€‚å„クラスã¯ç•°ãªã‚‹é€šçŸ¥æ‰‹æ®µã‚’担当ã—ã€å…±é€šã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスを通ã—ã¦çµ±ä¸€çš„ã«æ‰±ã†ã“ã¨ãŒã§ãã¾ã™ã€‚
// EmailNotification クラス
class EmailNotification implements Notification {
private String emailAddress;
public EmailNotification(String emailAddress) {
this.emailAddress = emailAddress;
}
@Override
public void sendNotification(String message) {
// メールé€ä¿¡ã®å®Ÿè£…
System.out.println("Sending email to " + emailAddress + ": " + message);
}
}
// SMSNotification クラス
class SMSNotification implements Notification {
private String phoneNumber;
public SMSNotification(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
@Override
public void sendNotification(String message) {
// SMS é€ä¿¡ã®å®Ÿè£…
System.out.println("Sending SMS to " + phoneNumber + ": " + message);
}
}
ã“ã®ã‚ˆã†ãªã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスを使用ã™ã‚‹ã“ã¨ã§ã€é€šçŸ¥æ©Ÿèƒ½ã‚’æä¾›ã™ã‚‹ã‚¯ãƒ©ã‚¹ã‚’柔軟ã‹ã¤çµ±ä¸€çš„ã«æ‰±ã†ã“ã¨ãŒã§ãã¾ã™ã€‚ç•°ãªã‚‹é€šçŸ¥æ‰‹æ®µã‚’è¿½åŠ ã™ã‚‹å ´åˆã§ã‚‚ã€Notification インターフェイスを実装ã™ã‚‹ã“ã¨ã§ä¸€è²«æ€§ã‚’ä¿ã¡ã¤ã¤ã€æ–°ã—ã„å®Ÿè£…ã‚’è¿½åŠ ã§ãã¾ã™ã€‚
「017 インターフェイスã€å•題集リスト
ã“ã®å†…容ã«ã¤ã„ã¦JavaDrillã§å®Ÿéš›ã«æ‰‹ã‚’å‹•ã‹ã—ã¦å¦ç¿’ã§ãã¾ã™
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
// ファイルã®èªã¿è¾¼ã¿ã¨æ›¸ãè¾¼ã¿ã‚’行ã†ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイス
interface FileOperation {
String readFile(String filePath) throws IOException;
void writeFile(String filePath, String content) throws IOException;
}
// FileOperation インターフェイスã®å®Ÿè£…クラス
class FileHandler implements FileOperation {
@Override
public String readFile(String filePath) throws IOException {
StringBuilder content = new StringBuilder();
try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) {
String line;
while ((line = reader.readLine()) != null) {
content.append(line).append('\n');
}
}
return content.toString();
}
@Override
public void writeFile(String filePath, String content) throws IOException {
try (BufferedWriter writer = new BufferedWriter(new FileWriter(filePath))) {
writer.write(content);
}
}
}
public class Main {
public static void main(String[] args) {
// ファイルã®èªã¿è¾¼ã¿ã¨æ›¸ãè¾¼ã¿ã‚’行ã†ãŸã‚ã® FileHandler インスタンスを生æˆ
FileOperation fileHandler = new FileHandler();
// èªã¿è¾¼ã‚€ãƒ•ァイルã®ãƒ‘ス
String filePath = "example.txt";
try {
// ファイルã®å†…容をèªã¿è¾¼ã¿
String fileContent = fileHandler.readFile(filePath);
System.out.println("File Content:\n" + fileContent);
// 書ã込む内容
String newContent = "This is new content.";
// ãƒ•ã‚¡ã‚¤ãƒ«ã«æ–°ã—ã„内容を書ãè¾¼ã¿
fileHandler.writeFile(filePath, newContent);
System.out.println("File Content After Writing:\n" + fileHandler.readFile(filePath));
} catch (IOException e) {
e.printStackTrace();
}
}
}
ã“ã®ä¾‹ã§ã¯ã€FileHandler クラス㌠FileOperation インターフェイスを実装ã—ã¦ãŠã‚Šã€ãƒ•ァイルã®èªã¿è¾¼ã¿ã¨æ›¸ãè¾¼ã¿ã‚’行ã„ã¾ã™ã€‚Main クラスã§ã¯ã€FileHandler クラスã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚’生æˆã—ã€ãƒ•ァイルã®èªã¿æ›¸ãæ“作を実行ã—ã¦ã„ã¾ã™ã€‚
ファイルæ“作ã®ãŸã‚ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスをè¨è¨ˆã™ã‚‹ã“ã¨ã¯ã€ç•°ãªã‚‹ã‚¯ãƒ©ã‚¹ãŒå…±é€šã®ãƒ•ァイルæ“作メソッドをæä¾›ã—ã€ã‚³ãƒ¼ãƒ‰ã®å†åˆ©ç”¨æ€§ã¨æ‹¡å¼µæ€§ã‚’高ã‚る手段ã§ã™ã€‚以下ã«ã€ã“ã®ã‚¢ãƒ—ãƒãƒ¼ãƒã®è§£èª¬ã‚’示ã—ã¾ã™ã€‚
import java.io.IOException;
interface FileOperation {
String readFile(String filePath) throws IOException;
void writeFile(String filePath, String content) throws IOException;
}
readFile メソッド: ãƒ•ã‚¡ã‚¤ãƒ«ã®æŒ‡å®šã•れãŸãƒ‘スã‹ã‚‰å†…容をèªã¿å–ã‚Šã€æ–‡å—列ã¨ã—ã¦è¿”ã—ã¾ã™ã€‚ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯ IOException をスãƒãƒ¼ã™ã‚‹å¯èƒ½æ€§ãŒã‚ã‚‹ãŸã‚ã€å‘¼ã³å‡ºã—å…ƒã§ä¾‹å¤–処ç†ãŒå¿…è¦ã§ã™ã€‚writeFile メソッド: 指定ã•れãŸãƒ‘スã®ãƒ•ã‚¡ã‚¤ãƒ«ã«æŒ‡å®šã•れãŸå†…容を書ãè¾¼ã¿ã¾ã™ã€‚åŒæ§˜ã«ã€ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚‚ IOException をスãƒãƒ¼ã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚import java.io.*;
class FileHandler implements FileOperation {
@Override
public String readFile(String filePath) throws IOException {
StringBuilder content = new StringBuilder();
try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) {
String line;
while ((line = reader.readLine()) != null) {
content.append(line).append('\n');
}
}
return content.toString();
}
@Override
public void writeFile(String filePath, String content) throws IOException {
try (BufferedWriter writer = new BufferedWriter(new FileWriter(filePath))) {
writer.write(content);
}
}
}
readFile メソッドã®å®Ÿè£…: BufferedReader を使用ã—ã¦æŒ‡å®šã•れãŸãƒ•ァイルã‹ã‚‰è¡Œã‚’èªã¿å–りã€ãれを文å—列ã«è¿½åŠ ã—ã¾ã™ã€‚writeFile メソッドã®å®Ÿè£…: BufferedWriter を使用ã—ã¦æŒ‡å®šã•れãŸãƒ•ã‚¡ã‚¤ãƒ«ã«æ–‡å—列を書ãè¾¼ã¿ã¾ã™ã€‚ã“ã®ã‚ˆã†ã«ã€FileHandler クラス㯠FileOperation インターフェイスを実装ã—ã€ãƒ•ァイルã®èªã¿æ›¸ãメソッドをæä¾›ã—ã¦ã„ã¾ã™ã€‚ä»–ã®ã‚¯ãƒ©ã‚¹ãŒãƒ•ァイルæ“作を行ã„ãŸã„å ´åˆã€FileOperation インターフェイスを実装ã™ã‚‹ã“ã¨ã§ã€åŒã˜ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスを介ã—ã¦ãƒ•ァイルæ“ä½œã®æ©Ÿèƒ½ã‚’利用ã§ãã¾ã™ã€‚
「017 インターフェイスã€å•題集リスト
ã“ã®å†…容ã«ã¤ã„ã¦JavaDrillã§å®Ÿéš›ã«æ‰‹ã‚’å‹•ã‹ã—ã¦å¦ç¿’ã§ãã¾ã™
// VolumeAdjustable インターフェイス
interface VolumeAdjustable {
void adjustVolume(int volumeLevel);
}
// TV クラス㌠VolumeAdjustable インターフェイスを実装
class TV implements VolumeAdjustable {
private int currentVolume; // TV ã®ç¾åœ¨ã®éŸ³é‡
// コンストラクタ
public TV() {
this.currentVolume = 0; // åˆæœŸéŸ³é‡ã‚’ 0 ã«è¨å®š
}
// VolumeAdjustable インターフェイスã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’実装
@Override
public void adjustVolume(int volumeLevel) {
// 実際ã®éŸ³é‡èª¿æ•´ã®ãƒã‚¸ãƒƒã‚¯ã‚’ã“ã“ã«å®Ÿè£…
this.currentVolume = volumeLevel;
System.out.println("TVã®éŸ³é‡ã‚’調整ã—ã¾ã—ãŸã€‚æ–°ã—ã„音é‡: " + this.currentVolume);
}
// ä»–ã® TV クラスã«é–¢é€£ã™ã‚‹ãƒ¡ã‚½ãƒƒãƒ‰ã‚„æ©Ÿèƒ½ã‚’è¿½åŠ ã§ãã¾ã™
}
// メインクラス(テスト用)
public class Main {
public static void main(String[] args) {
// TV クラスã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚’作æˆ
TV myTV = new TV();
// 音é‡ã‚’調整
myTV.adjustVolume(20);
}
}
ã“ã®ä¾‹ã§ã¯ã€VolumeAdjustable インターフェイスã«ã¯ adjustVolume メソッドãŒå«ã¾ã‚Œã¦ãŠã‚Šã€TV クラスã¯ã“ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスを実装ã—ã¦ã„ã¾ã™ã€‚TV クラスã§ã¯ã€adjustVolume メソッド内ã§éŸ³é‡ã‚’è¨å®šã—ã€è¨å®šã•れãŸéŸ³é‡ã‚’コンソールã«è¡¨ç¤ºã—ã¦ã„ã¾ã™ã€‚
「017 インターフェイスã€å•題集リスト
ã“ã®å†…容ã«ã¤ã„ã¦JavaDrillã§å®Ÿéš›ã«æ‰‹ã‚’å‹•ã‹ã—ã¦å¦ç¿’ã§ãã¾ã™
// 勉強å¯èƒ½ãªã‚ªãƒ–ジェクトを示ã™ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイス
interface Studiable {
void study();
}
// å¦ç”Ÿã‚’表㙠Student クラス㌠Studiable インターフェイスを実装
class Student implements Studiable {
// Student クラス㌠Studiable インターフェイス㮠study メソッドを実装
@Override
public void study() {
System.out.println("The student is studying");
// å¦ç”ŸãŒå‹‰å¼·ã™ã‚‹ãŸã‚ã®å…·ä½“çš„ãªå‡¦ç†ã‚’ã“ã“ã«è¿½åŠ
}
// ä»–ã®å¦ç”Ÿã«é–¢ã™ã‚‹ãƒ¡ã‚½ãƒƒãƒ‰ã‚„プãƒãƒ‘ãƒ†ã‚£ã‚’è¿½åŠ ã§ãã‚‹
}
ã“ã®ã‚³ãƒ¼ãƒ‰ä¾‹ã§ã¯ã€Studiable インターフェイスを作æˆã—ã€Student クラスãŒã“れを実装ã—ã¦ã„ã¾ã™ã€‚Student クラス内㧠study メソッドをオーãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã—ã¦ã€å¦ç”ŸãŒå‹‰å¼·ã™ã‚‹ã¨ã„ã†å…·ä½“çš„ãªæŒ™å‹•を記述ã§ãã¾ã™ã€‚
「017 インターフェイスã€å•題集リスト
ã“ã®å†…容ã«ã¤ã„ã¦JavaDrillã§å®Ÿéš›ã«æ‰‹ã‚’å‹•ã‹ã—ã¦å¦ç¿’ã§ãã¾ã™
// 走れるオブジェクトを示ã™ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイス
interface Runnable {
void run();
}
// 車を表㙠Car クラス㌠Runnable インターフェイスを実装
class Car implements Runnable {
// Car クラス㌠Runnable インターフェイス㮠run メソッドを実装
@Override
public void run() {
System.out.println("The car is running");
// 車ã®èµ°è¡Œã«é–¢ã™ã‚‹å…·ä½“çš„ãªå‡¦ç†ã‚’ã“ã“ã«è¿½åŠ
}
// ä»–ã®è»Šã«é–¢ã™ã‚‹ãƒ¡ã‚½ãƒƒãƒ‰ã‚„プãƒãƒ‘ãƒ†ã‚£ã‚’è¿½åŠ ã§ãã‚‹
}
ã“ã®ã‚³ãƒ¼ãƒ‰ä¾‹ã§ã¯ã€Runnable インターフェイスを作æˆã—ã€Car クラスãŒã“れを実装ã—ã¦ã„ã¾ã™ã€‚Car クラス内㧠run メソッドをオーãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã—ã¦ã€è»Šã®èµ°è¡Œã«é–¢ã™ã‚‹æŒ™å‹•を具体的ã«è¨˜è¿°ã§ãã¾ã™ã€‚
「017 インターフェイスã€å•題集リスト
ã“ã®å†…容ã«ã¤ã„ã¦JavaDrillã§å®Ÿéš›ã«æ‰‹ã‚’å‹•ã‹ã—ã¦å¦ç¿’ã§ãã¾ã™
// 飛ã¹ã‚‹å‹•物を示ã™ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイス
interface Flyable {
void fly();
}
// 動物を表㙠Animal クラス㌠Flyable インターフェイスを実装
class Animal implements Flyable {
// Animal クラス㌠Flyable インターフェイス㮠fly メソッドを実装
@Override
public void fly() {
System.out.println("The animal is flying");
// 飛行ã®å…·ä½“çš„ãªå‡¦ç†ã‚’ã“ã“ã«è¿½åŠ
}
// ä»–ã®å‹•物ã«é–¢ã™ã‚‹ãƒ¡ã‚½ãƒƒãƒ‰ã‚„プãƒãƒ‘ãƒ†ã‚£ã‚’è¿½åŠ ã§ãã‚‹
}
ã“ã®ã‚³ãƒ¼ãƒ‰ä¾‹ã§ã¯ã€Flyable インターフェイスを作æˆã—ã€Animal クラスãŒã“れを実装ã—ã¦ã„ã¾ã™ã€‚Animal クラス内㧠fly メソッドをオーãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã—ã¦ã€å‹•物ãŒé£›ã¶æŒ™å‹•を具体的ã«è¨˜è¿°ã§ãã¾ã™ã€‚
「017 インターフェイスã€å•題集リスト
ã“ã®å†…容ã«ã¤ã„ã¦JavaDrillã§å®Ÿéš›ã«æ‰‹ã‚’å‹•ã‹ã—ã¦å¦ç¿’ã§ãã¾ã™
// æç”»å¯èƒ½ãªã‚ªãƒ–ジェクトを示ã™ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイス
interface Drawable {
void draw();
}
// 形状を表㙠Shape クラス
class Shape implements Drawable {
// Shape クラス㌠Drawable インターフェイス㮠draw メソッドを実装
@Override
public void draw() {
System.out.println("Drawing a shape");
// æç”»ã®å…·ä½“çš„ãªå‡¦ç†ã‚’ã“ã“ã«è¿½åŠ
}
// ä»–ã®å½¢çжã«é–¢ã™ã‚‹ãƒ¡ã‚½ãƒƒãƒ‰ã‚„プãƒãƒ‘ãƒ†ã‚£ã‚’è¿½åŠ ã§ãã‚‹
}
ã“ã®ä¾‹ã§ã¯ã€Drawable インターフェイスã«ã¯ draw メソッドãŒã‚りã¾ã™ã€‚ãã—ã¦ã€Shape クラスã¯ã“ã® Drawable インターフェイスを実装ã—ã¦ã„ã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€Shape ã‚¯ãƒ©ã‚¹ã¯æç”»å¯èƒ½ãªã‚ªãƒ–ジェクトã¨ã—ã¦æ‰±ã†ã“ã¨ãŒã§ãã¾ã™ã€‚draw メソッド内ã«ã¯å…·ä½“çš„ãªæç”»å‡¦ç†ãŒå®Ÿè£…ã•れるã“ã¨ãŒæœŸå¾…ã•れã¾ã™ã€‚
クラスã¨ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã¯ã€Javaã«ãŠã‘るオブジェクト指å‘プãƒã‚°ãƒ©ãƒŸãƒ³ã‚°ã®åŸºæœ¬çš„ãªè¦ç´ ã§ã™ã€‚ã“れらã®è¦ç´ を組ã¿åˆã‚ã›ã¦ä½¿ç”¨ã™ã‚‹ã“ã¨ã§ã€æŸ”軟ã§åŠ¹æžœçš„ãªã‚³ãƒ¼ãƒ‰ã‚’作æˆã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚以下ã«ã€ã‚¯ãƒ©ã‚¹ã¨ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã®é–¢ä¿‚性ã«ã¤ã„ã¦è§£èª¬ã—ã¾ã™ã€‚
ç·ã˜ã¦ã€ã‚¯ãƒ©ã‚¹ã¨ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã¯ç•°ãªã‚‹å½¹å‰²ã‚’æžœãŸã—ã¾ã™ãŒã€é©åˆ‡ã«çµ„ã¿åˆã‚ã›ã¦ä½¿ç”¨ã™ã‚‹ã“ã¨ã§ã€æŸ”è»Ÿã§æ‹¡å¼µå¯èƒ½ãªã‚¢ãƒ—リケーションを構築ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
「017 インターフェイスã€å•題集リスト
ã“ã®å†…容ã«ã¤ã„ã¦JavaDrillã§å®Ÿéš›ã«æ‰‹ã‚’å‹•ã‹ã—ã¦å¦ç¿’ã§ãã¾ã™
// æ—¢å˜ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイス
interface ExistingInterface {
void existingMethod();
}
// 複数ã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’å«ã‚€æ–°ã—ã„æ‹¡å¼µã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイス
interface ExtendedInterface extends ExistingInterface {
void newMethod1();
void newMethod2();
}
// 実装クラス
class MyClass implements ExtendedInterface {
// æ—¢å˜ã®ãƒ¡ã‚½ãƒƒãƒ‰ã®å®Ÿè£…
@Override
public void existingMethod() {
System.out.println("Existing method implementation");
}
// æ–°ã—ã„メソッド1ã®å®Ÿè£…
@Override
public void newMethod1() {
System.out.println("New Method 1 implementation");
}
// æ–°ã—ã„メソッド2ã®å®Ÿè£…
@Override
public void newMethod2() {
System.out.println("New Method 2 implementation");
}
}
// 利用例
public class Main {
public static void main(String[] args) {
MyClass myObj = new MyClass();
// æ—¢å˜ã®ãƒ¡ã‚½ãƒƒãƒ‰å‘¼ã³å‡ºã—
myObj.existingMethod();
// æ–°ã—ã„メソッド呼ã³å‡ºã—
myObj.newMethod1();
myObj.newMethod2();
}
}
ã“ã®ä¾‹ã§ã¯ã€ExistingInterface ã¨ã„ã†æ—¢å˜ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスを拡張ã™ã‚‹ ExtendedInterface を作æˆã—ã€ãれを実装ã™ã‚‹ MyClass クラスãŒã€æ—¢å˜ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¨æ–°ã—ã„メソッドを実装ã—ã¦ã„ã¾ã™ã€‚
æ—¢å˜ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイス:
interface ExistingInterface {
void existingMethod();
}
æ–°ã—ã„æ‹¡å¼µã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイス:
interface ExtendedInterface extends ExistingInterface {
void newMethod1();
void newMethod2();
// ä»–ã®æ–°ã—ã„ãƒ¡ã‚½ãƒƒãƒ‰ã‚‚è¿½åŠ å¯èƒ½
}
ã“ã“ã§ã€ExtendedInterface 㯠ExistingInterface ã‚’æ‹¡å¼µã—ã¦ã„ã¾ã™ã€‚
実装クラス:
class MyClass implements ExtendedInterface {
// æ—¢å˜ã®ãƒ¡ã‚½ãƒƒãƒ‰ã®å®Ÿè£…
@Override
public void existingMethod() {
// 実装
}
// æ–°ã—ã„メソッド1ã®å®Ÿè£…
@Override
public void newMethod1() {
// 実装
}
// æ–°ã—ã„メソッド2ã®å®Ÿè£…
@Override
public void newMethod2() {
// 実装
}
}
ã“ã“ã§ã€MyClass クラス㯠ExtendedInterface を実装ã—ã¦ã„ã¾ã™ã€‚ã“ã®ã‚¯ãƒ©ã‚¹ã¯ã€æ—¢å˜ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¨æ–°ã—ã„メソッドを実装ã™ã‚‹è²¬ä»»ãŒã‚りã¾ã™ã€‚
ã“ã®ã‚ˆã†ã«ã—ã¦ã€æ–°ã—ã„æ©Ÿèƒ½ã‚’å«ã‚€æ‹¡å¼µã•れãŸã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスを作æˆã—ã€ãれを実装ã™ã‚‹ã“ã¨ã§ã€æ—¢å˜ã®ã‚³ãƒ¼ãƒ‰ã«æ–°ã—ã„æ©Ÿèƒ½ã‚’組ã¿è¾¼ã‚€ã“ã¨ãŒã§ãã¾ã™ã€‚
「017 インターフェイスã€å•題集リスト
ã“ã®å†…容ã«ã¤ã„ã¦JavaDrillã§å®Ÿéš›ã«æ‰‹ã‚’å‹•ã‹ã—ã¦å¦ç¿’ã§ãã¾ã™