/**
* ドメイン非依存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ã§å®Ÿéš›ã«æ‰‹ã‚’å‹•ã‹ã—ã¦å¦ç¿’ã§ãã¾ã™
DatabaseConnection ã¨ã„ã†ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスを作æˆã—ã¦ã€ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã¸ã®æŽ¥ç¶šã¨ã‚¯ã‚¨ãƒªã®å®Ÿè¡Œã‚’行ã†ãƒ¡ã‚½ãƒƒãƒ‰ã‚’å«ã‚ã¾ã™ã€‚
MySQLã€PostgreSQLãªã©ã®ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚’扱ã†ã‚¯ãƒ©ã‚¹ã§ã“ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスを実装ã—ã¾ã™ã€‚
DatabaseConnection ã¨ã„ã†ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスを作æˆã—ã¾ã™ã€‚MySQLDatabaseConnection クラスや PostgreSQLDatabaseConnection クラスãªã©ã€ç•°ãªã‚‹ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚’扱ã†ãŸã‚ã®ã‚¯ãƒ©ã‚¹ã‚’作æˆã—ã¾ã™ã€‚DatabaseConnection インターフェイスを実装ã—ã¾ã™ã€‚DatabaseConnection インターフェイスã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’具体的ã«å®Ÿè£…ã—ã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€ç•°ãªã‚‹ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚’扱ã†ã‚¯ãƒ©ã‚¹ãŒå…±é€šã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスをæŒã¡ã€ãƒ—ãƒã‚°ãƒ©ãƒ ãŒã“れらã®ã‚¯ãƒ©ã‚¹ã‚’使ã£ã¦ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹æ“作を行ãˆã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚
→解ç”例
「017 インターフェイスã€å•題集リスト
ã“ã®å†…容ã«ã¤ã„ã¦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ã§å®Ÿéš›ã«æ‰‹ã‚’å‹•ã‹ã—ã¦å¦ç¿’ã§ãã¾ã™
Drawable ã¨ã„ã†ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスを作æˆã—ã¦ã€å›³å½¢ã‚’æç”»ã™ã‚‹ãƒ¡ã‚½ãƒƒãƒ‰ã‚’å«ã‚ã¾ã™ã€‚
円ã€å››è§’å½¢ã€ä¸‰è§’å½¢ãªã©ã‚’表ã™ã‚¯ãƒ©ã‚¹ã§ã“ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスを実装ã—ã¾ã™ã€‚
Drawable インターフェイスを作æˆã—ã€æç”»ã™ã‚‹ãŸã‚ã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’å«ã‚ã¾ã™ã€‚Drawable インターフェイスを実装ã—ã¾ã™ã€‚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ã§å®Ÿéš›ã«æ‰‹ã‚’å‹•ã‹ã—ã¦å¦ç¿’ã§ãã¾ã™
Notification ã¨ã„ã†ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスを作æˆã—ã¦ã€é€šçŸ¥ã‚’é€ä¿¡ã™ã‚‹ãƒ¡ã‚½ãƒƒãƒ‰ã‚’å«ã‚ã¾ã™ã€‚
メール通知ã€SMS通知ãªã©ã‚’扱ã†ã‚¯ãƒ©ã‚¹ã§ã“ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスを実装ã—ã¾ã™ã€‚
void sendNotification(String message); ãªã©ã€‚ã“れらã®ãƒ’ントを元ã«ã€Notification インターフェイスをè¨è¨ˆã—ã¦ãã ã•ã„。ãã®å¾Œã€ãƒ¡ãƒ¼ãƒ«é€šçŸ¥ã‚„SMS通知を扱ã†ã‚¯ãƒ©ã‚¹ã§ã“ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスを実装ã—ã¾ã™ã€‚
→解ç”例
「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ã§å®Ÿéš›ã«æ‰‹ã‚’å‹•ã‹ã—ã¦å¦ç¿’ã§ãã¾ã™
FileOperation ã¨ã„ã†ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスを作æˆã—ã¦ã€ãƒ•ァイルã®èªã¿è¾¼ã¿ã¨æ›¸ãè¾¼ã¿ã‚’行ã†ãƒ¡ã‚½ãƒƒãƒ‰ã‚’å«ã‚ã¾ã™ã€‚
ãれを実装ã™ã‚‹ã‚¯ãƒ©ã‚¹ã§ã€å…·ä½“çš„ãªãƒ•ァイルæ“作を行ã„ã¾ã™ã€‚
IOException ãªã©ã®ä¾‹å¤–ãŒç™ºç”Ÿã™ã‚‹å¯èƒ½æ€§ãŒã‚ã‚‹ãŸã‚ã€ãれã«å¯¾ã™ã‚‹ã‚¨ãƒ©ãƒ¼å‡¦ç†ã‚’考慮ã—ã¾ã™ã€‚try-catch ブãƒãƒƒã‚¯å†…ã§ä¾‹å¤–ãŒç™ºç”Ÿã—ãŸå ´åˆã®å‡¦ç†ã‚’実装ã—ã¾ã™ã€‚ã“れらã®è¦ç‚¹ã‚’考慮ã—ã¦ã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスをè¨è¨ˆã—ã€ãã®å®Ÿè£…クラスを作æˆã—ã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€ä»–ã®ã‚¯ãƒ©ã‚¹ãŒã“ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスを実装ã™ã‚‹ã“ã¨ã§ã€ãƒ•ァイルã®èªã¿æ›¸ã機能を利用ã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚
→解ç”例
「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ã§å®Ÿéš›ã«æ‰‹ã‚’å‹•ã‹ã—ã¦å¦ç¿’ã§ãã¾ã™
テレビを表㙠TV クラスを作æˆã—ã¾ã™ã€‚
音é‡èª¿æ•´å¯èƒ½ãªã‚ªãƒ–ジェクトを示㙠VolumeAdjustable インターフェイスを作æˆã—ã¾ã™ã€‚
TV クラス㌠VolumeAdjustable インターフェイスを実装ã™ã‚‹ã‚ˆã†ã«ã—ã¾ã™ã€‚
adjustVolume(int volumeLevel) メソッド: 音é‡ã‚’調整ã™ã‚‹ãŸã‚ã®ãƒ¡ã‚½ãƒƒãƒ‰ã§ã™ã€‚引数ã«ã¯èª¿æ•´ã™ã‚‹éŸ³é‡ã®ãƒ¬ãƒ™ãƒ«ãŒå«ã¾ã‚Œã¾ã™ã€‚TV クラスを作æˆã—ã€VolumeAdjustable インターフェイスを実装ã—ã¾ã™ã€‚adjustVolume メソッド: 音é‡ã‚’調整ã™ã‚‹ãŸã‚ã®å…·ä½“çš„ãªå®Ÿè£…ã‚’æä¾›ã—ã¾ã™ã€‚例ãˆã°ã€ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰å†…ã§ãƒ†ãƒ¬ãƒ“ã®éŸ³é‡ã‚’è¨å®šã™ã‚‹å‡¦ç†ã‚’実行ã—ã¾ã™ã€‚ã“ã®è¨è¨ˆã«ã‚ˆã‚Šã€TV クラス㯠VolumeAdjustable インターフェイスを実装ã™ã‚‹ã“ã¨ã§ã€éŸ³é‡ã®èª¿æ•´æ©Ÿèƒ½ã‚’æä¾›ã—ã¾ã™ã€‚
→解ç”例
「017 インターフェイスã€å•題集リスト
ã“ã®å†…容ã«ã¤ã„ã¦JavaDrillã§å®Ÿéš›ã«æ‰‹ã‚’å‹•ã‹ã—ã¦å¦ç¿’ã§ãã¾ã™