Java 常见设计模式及应用场景
Java 常见设计模式及应用场景
在Java的世界里,设计模式就像武林秘籍一样,掌握了它们,你就能在软件开发的江湖中游刃有余。今天,我们就来聊聊那些常见的设计模式以及它们在现实生活中的应用场景。
单例模式:一个人的世界
单例模式可以说是设计模式中的“独行侠”。它的核心思想就是一个类只能有一个实例,并且提供一个全局访问点。这就好比我们公司里的董事长,只有一个,而且每个人都得找他汇报工作。
代码示例:
public class Singleton {
private static Singleton instance;
// 私有构造函数防止外部实例化
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
在这个例子中,getInstance()方法确保了整个程序中只有一个Singleton对象存在。这种模式在需要控制资源访问的时候特别有用,比如数据库连接池或者日志记录器。
工厂模式:生产线上的工人
工厂模式就像是一个生产线上的工人,负责制造不同的产品。它定义了一个创建对象的接口,但由子类决定实例化哪一个类。工厂模式把类的实例化推迟到了子类。
代码示例:
// 抽象产品
interface Shape {
void draw();
}
// 具体产品
class Rectangle implements Shape {
public void draw() {
System.out.println("Drawing Rectangle");
}
}
class Circle implements Shape {
public void draw() {
System.out.println("Drawing Circle");
}
}
// 工厂类
class ShapeFactory {
public Shape getShape(String shapeType){
if(shapeType == null){
return null;
}
if(shapeType.equalsIgnoreCase("CIRCLE")){
return new Circle();
} else if(shapeType.equalsIgnoreCase("RECTANGLE")){
return new Rectangle();
}
return null;
}
}
在这个例子中,ShapeFactory根据传入的参数决定创建哪种形状的对象。这种模式非常适合用于创建一系列相关的对象,而不必关心具体的实现细节。
观察者模式:粉丝与明星
观察者模式描述了一种一对多的关系,当一个对象的状态发生变化时,所有依赖于它的对象都会得到通知并自动更新。这就好比粉丝关注明星,只要明星发新歌,所有的粉丝都会收到推送。
代码示例:
// 抽象观察者
interface Observer {
void update(String message);
}
// 抽象主题
interface Subject {
void registerObserver(Observer o);
void removeObserver(Observer o);
void notifyObservers(String message);
}
// 具体主题
class Star implements Subject {
private List<Observer> observers = new ArrayList<>();
@Override
public void registerObserver(Observer o) {
observers.add(o);
}
@Override
public void removeObserver(Observer o) {
observers.remove(o);
}
@Override
public void notifyObservers(String message) {
for (Observer observer : observers) {
observer.update(message);
}
}
}
// 具体观察者
class Fan implements Observer {
private String name;
public Fan(String name) {
this.name = name;
}
@Override
public void update(String message) {
System.out.println(name + " received message: " + message);
}
}
在这里,Star类扮演着发布消息的角色,而Fan则是接收消息的一方。当明星发布新歌时,所有注册的粉丝都会立即收到通知。这种模式非常适合用于事件驱动的应用程序。
总结
设计模式不仅仅是代码技巧的集合,更是解决问题的智慧结晶。无论是单例模式的独孤求败,还是工厂模式的流水线作业,亦或是观察者模式的粉丝效应,每一种模式都有其独特的魅力和适用场景。掌握了这些模式,你就能够在Java开发的路上走得更远,更稳。记住,选择合适的设计模式,就像选对了武功秘籍,会让你的编程之路更加顺畅!