Open4
デザパ復習
参考記事ペタペタ
くそめも
- メソッドのシグネチャ
メソッドの名前と、そのメソッドが受け取る引数の型および順序の組み合わせ
find . -type f -name "*.class" -exec rm -f {} +
1. Iteratorパターン
要素の集まりを保有するオブジェクトの各要素に順番にアクセスする方法を提供するためのパターン
走査方法を与えるクラスを List クラスとは独立させておきます
主な構成要素は2つ
- 集約オブジェクト(List)
- 走査方法
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());
}
}
}
単一継承: 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");
}
}