Java是一種非常流行的面向?qū)ο缶幊陶Z言,它有著豐富的語法和庫,可以用于開發(fā)各種類型的應用程序。Java中的設計模式是一種廣泛應用于軟件開發(fā)中的技巧,它能夠幫助開發(fā)人員設計出更加靈活、可重用、可擴展的代碼。
以下是三種常用的Java設計模式和它們的示例:
1. 工廠模式
public interface Animal {
void makeSound();
}
public class Dog implements Animal {
@Override
public void makeSound() {
System.out.println("汪汪");
}
}
public class Cat implements Animal {
@Override
public void makeSound() {
System.out.println("喵喵");
}
}
public class AnimalFactory {
public Animal createAnimal(String type) {
if (type.equals("dog")) {
return new Dog();
} else if (type.equals("cat")) {
return new Cat();
} else {
throw new IllegalArgumentException("Unsupported animal type");
}
}
}
在上面的示例中,我們定義了一個Animal接口和它的兩個實現(xiàn)類Dog和Cat。AnimalFactory類是一個工廠類,在不同的類型參數(shù)下,它可以創(chuàng)建不同的Animal實例。
2. 單例模式
public class Singleton {
private static Singleton instance;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
單例模式是一種只能創(chuàng)建一個實例的模式,它通常是通過一個靜態(tài)方法來獲取該實例。在上面的示例中,我們定義了一個私有的構造函數(shù)和一個靜態(tài)的getInstance()方法來獲取Singleton實例。只有在instance為null的時候,才會創(chuàng)建這個實例。
3. 觀察者模式
public interface Observer {
void onUpdate(float temperature, float humidity);
}
public interface Subject {
void registerObserver(Observer observer);
void removeObserver(Observer observer);
void notifyObservers();
}
public class WeatherStation implements Subject {
private float temperature;
private float humidity;
private List<Observer> observers = new ArrayList<>();
public void setTemperature(float temperature) {
this.temperature = temperature;
notifyObservers();
}
public void setHumidity(float humidity) {
this.humidity = humidity;
notifyObservers();
}
@Override
public void registerObserver(Observer observer) {
observers.add(observer);
}
@Override
public void removeObserver(Observer observer) {
observers.remove(observer);
}
@Override
public void notifyObservers() {
for (Observer observer : observers) {
observer.onUpdate(temperature, humidity);
}
}
}
觀察者模式是一種當系統(tǒng)中某個對象狀態(tài)變化時,其他與之相關對象都會得到通知并自動更新的模式。在上面的示例中,我們定義了Observer和Subject接口,以及一個WeatherStation類作為Subject。WeatherStation類會保存溫度和濕度,并在它們發(fā)生變化時通知其中的觀察者。