单例模式是一种创建型设计模式,确保类只有一个实例,并提供一个全局访问点。在Java中,实现单例模式通常有以下几种方式:
工厂模式是一种创建型设计模式,用于创建对象的接口,但让子类决定实例化哪个类。在Java中,工厂模式通常包含一个接口和多个实现该接口的工厂类,示例代码如下:
// 接口
public interface Shape {
void draw();
}
// 实现类
public class Circle implements Shape {
@Override
public void draw() {
System.out.println("Circle.draw()");
}
}
public class Rectangle implements Shape {
@Override
public void draw() {
System.out.println("Rectangle.draw()");
}
}
// 工厂类
public class ShapeFactory {
public static Shape createShape(String shapeType) {
if (shapeType.equalsIgnoreCase("Circle")) {
return new Circle();
} else if (shapeType.equalsIgnoreCase("Rectangle")) {
return new Rectangle();
}
return null;
}
}
// 使用工厂类创建对象
public class FactoryPatternDemo {
public static void main(String[] args) {
Shape circle = ShapeFactory.createShape("Circle");
Shape rectangle = ShapeFactory.createShape("Rectangle");
circle.draw();
rectangle.draw();
}
}
观察者模式是一种行为设计模式,定义了一种一对多的依赖关系,当一个对象的状态发生变化时,其所有依赖者都会收到通知并自动更新。在Java中,可以使用Java内置的Observer和Observable类实现观察者模式,示例代码如下:
// 被观察者
public class Subject extends Observable {
private int state;
public int getState() {
return state;
}
public void setState(int state) {
this.state = state;
setChanged();
notifyObservers(state);
}
}
// 观察者
public class Observer implements java.util.Observer {
public void update(Observable o, Object arg) {
System.out.println("State changed to: " + arg);
}
}
// 使用观察者模式
public class ObserverPatternDemo {
public static void main(String[] args) {
Subject subject = new Subject();
Observer observer1 = new Observer();
Observer observer2 = new Observer();
subject.addObserver(observer1);
subject.addObserver(observer2);
subject.setState(1);
subject.setState(2);
}
}
在上述例子中,Subject类继承自Observable类,用于管理观察者列表并通知观察者状态变化;Observer类实现了java.util.Observer接口,用于接收被观察者的通知。通过使用Observer和Observable类,可以方便地实现观察者模式。