java设计模式及例子
设计模式是软件开发中经常使用的一种解决问题的方法论。设计模式可以帮助开发人员更好地组织代码,并且可能使代码更容易理解和维护。本文将介绍Java中的一些经典设计模式,并给出每个模式的具体实现例子。
1. 单例模式
单例模式是一种非常常见的设计模式,它确保只存在一个特定类的实例。具体实现中,通过私有化构造函数和一个静态方法,使得在多次调用该方法时只返回同一个实例。
应用场景:当需要全局访问一个类的实例时,使用单例模式可以方便地在代码中重复使用该实例。
例子:Java中可以使用枚举类型实现单例模式,如下:
```
public enum Singleton {
INSTANCE;
public void doSomething(){
System.out.println("Singleton do something");
}
}
```
2. 工厂模式
工厂模式通过创建一个工厂类来生成不同的实例,而无需在代码中直接实例化特定的类。工厂模式通常包括一个接口或抽象类和一个或多个实现该接口或抽象类的具体类,工厂类则负责创建具体实例并返回给调用方。
应用场景:当需要创建不同但相关的对象时,使用工厂模式可以使代码更加灵活,同时将具体实现与代码解耦。
例子:Java中可以使用简单工厂模式来实现图形绘制,如下:
```
public interface Shape {
void draw();
}
public class Rectangle implements Shape {
@Override
public void draw() {
System.out.println("Draw Rectangle");
}
}
public class Circle implements Shape {
@Override
public void draw() {
System.out.println("Draw Circle");
}
}
public class ShapeFactory {
public static Shape createShape(String shapeType) {
if (shapeType.equalsIgnoreCase("Rectangle")) {
return new Rectangle();
} else if (shapeType.equalsIgnoreCase("Circle")) {
return new Circle();
}
return null;
}
}
public class Client {
public static void main(String[] args) {
Shape rectangle = ShapeFactory.createShape("Rectangle");
Shape circle = ShapeFactory.createShape("Circle");
rectangle.draw();
circle.draw();
}
}
```
3. 观察者模式
观察者模式是一种模型-视图结构中的常见模式。它允许模型和视图分离,并且可以在模型状态发生变化时通知视图。
应用场景:当需要在PUB/SUB模型下订阅发布者并接收事件时,可以使用观察者模式。
例子:Java中可以使用Java内置的观察者模式来实现事件处理,如下:
```
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 ObserverImpl implements Observer {
@Override
public void update(Observable o, Object arg) {
System.out.println("Received update with value " + arg.toString());
}
}
public class Client {
public static void main(String[] args) {
Subject subject = new Subject();
Observer observer = new ObserverImpl();
subject.addObserver(observer);
subject.setState(1);
subject.setState(2);
}
}
```
本文仅介绍了部分常用的设计模式及其实现,但并不代表这些是唯一的或最好的实现方式。在实际开发中,应根据具体需求和场景选择最合适的设计模式。