Open4

デザパ復習

Kumamoto-HamachiKumamoto-Hamachi

くそめも

  • メソッドのシグネチャ
    メソッドの名前と、そのメソッドが受け取る引数の型および順序の組み合わせ

find . -type f -name "*.class" -exec rm -f {} +

Kumamoto-HamachiKumamoto-Hamachi

1. Iteratorパターン

要素の集まりを保有するオブジェクトの各要素に順番にアクセスする方法を提供するためのパターン
走査方法を与えるクラスを List クラスとは独立させておきます

主な構成要素は2つ

  • 集約オブジェクト(List)
  • 走査方法

https://www.techscore.com/tech/DesignPattern/Iterator/Iterator1

Iteratorインターフェース => Concrete Iteratorクラス
コレクション内の要素を順番に取り出す。つまり走査方法。

Aggregateインターフェース=>Concrete Aggregateクラス
コレクションを表現する。要はList。

てきとーに書いたのであとでみなおす

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

// Book class
class Book {
    private String title;
    // これがjavaさんのコンストラクタ
    public Book(String title) {
        this.title = title;
    }

    public String getTitle() {
        return title;
    }
}

// BookCollection class (ConcreteAggregate)
class BookCollection implements Iterable<Book> {
    private List<Book> books = new ArrayList<>();

    public void addBook(Book book) {
        books.add(book);
    }

    @Override
    public Iterator<Book> iterator() {
        return new BookIterator(books);
    }
}

// BookIterator class (ConcreteIterator)
class BookIterator implements Iterator<Book> {
    private List<Book> books;
    private int position = 0;

    public BookIterator(List<Book> books) {
        this.books = books;
    }

    @Override
    public boolean hasNext() {
        return position < books.size();
    }

    @Override
    public Book next() {
        return books.get(position++);
    }

    @Override
    public void remove() {
        throw new UnsupportedOperationException("remove");
    }
}

// Main class to demonstrate Iterator pattern
public class IteratorPatternExample {
    public static void main(String[] args) {
        BookCollection bookCollection = new BookCollection();
        bookCollection.addBook(new Book("Design Patterns"));
        bookCollection.addBook(new Book("Clean Code"));
        bookCollection.addBook(new Book("Effective Java"));

        for (Book book : bookCollection) {
            System.out.println("Book Title: " + book.getTitle());
        }
    }
}

Kumamoto-HamachiKumamoto-Hamachi

単一継承: Javaではクラスの単一継承しか許されていないため、クラスは1つのabstract classしか継承できませんが、複数のインターフェースは実装できます。

フィールドやコンストラクタを持てる: abstract classはフィールド(インスタンス変数)やコンストラクタを持つことができ、状態(データ)を持つオブジェクトの基盤となることができます。

interface MyInterface {
    void method1(); // 抽象メソッド
    default void method2() { // Java 8以降のデフォルトメソッド
        System.out.println("Default implementation");
    }
}

abstract class MyAbstractClass {
    String commonField;

    MyAbstractClass(String commonField) {
        this.commonField = commonField;
    }

    abstract void method1(); // 抽象メソッド
    void method2() { // 具体的なメソッド
        System.out.println("Concrete implementation");
    }
}