常用设计模式 Java 实现
常用设计模式 Java 实现
设计模式是一种被广泛应用于软件开发中的解决问题的方法。它们是在实践中总结出来的,可以帮助我们构建可维护、可扩展和可重用的代码。本文将介绍一些常用的设计模式,并给出相应的 Java 实现。
1. 工厂模式(Factory Pattern)
工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式。它通过使用一个共同的接口或基类来隐藏对象的实例化逻辑。
public interface Shape { void draw(); } public class Rectangle implements Shape { public void draw() { System.out.println("Inside Rectangle::draw() method."); } } public class Square implements Shape { public void draw() { System.out.println("Inside Square::draw() method."); } } public class Circle implements Shape { public void draw() { System.out.println("Inside Circle::draw() method."); } } public class ShapeFactory { public Shape getShape(String shapeType) { if (shapeType == null) { return null; } if (shapeType.equalsIgnoreCase("RECTANGLE")) { return new Rectangle(); } else if (shapeType.equalsIgnoreCase("SQUARE")) { return new Square(); } else if (shapeType.equalsIgnoreCase("CIRCLE")) { return new Circle(); } return null; } }
上面的代码演示了一个简单的工厂模式实现。工厂类 ShapeFactory 根据传入的类型参数来创建对应的对象。这样,客户端就可以通过调用工厂方法 getShape 来获取需要的对象,而不需要关心具体的实例化过程。
2. 单例模式(Singleton Pattern)
单例模式是一种创建型设计模式,它保证一个类只有一个实例,并提供了全局访问点。
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 方法通过双重检查锁定的方式确保只有在第一次调用时才创建实例。
3. 观察者模式(Observer Pattern)
观察者模式是一种行为型设计模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个目标对象,当目标对象发生改变时,会通知所有的观察者对象。
import java.util.ArrayList; import java.util.List; public class Subject { private Listobservers = new ArrayList<>(); private int state; public int getState() { return state; } public void setState(int state) { this.state = state; notifyAllObservers(); } public void attach(Observer observer) { observers.add(observer); } public void notifyAllObservers() { for (Observer observer : observers) { observer.update(); } } } public abstract class Observer { protected Subject subject; public abstract void update(); } public class BinaryObserver extends Observer { public BinaryObserver(Subject subject) { this.subject = subject; this.subject.attach(this); } public void update() { System.out.println("Binary String: " + Integer.toBinaryString(subject.getState())); } } public class OctalObserver extends Observer { public OctalObserver(Subject subject) { this.subject = subject; this.subject.attach(this); } public void update() { System.out.println("Octal String: " + Integer.toOctalString(subject.getState())); } } public class HexadecimalObserver extends Observer { public HexadecimalObserver(Subject subject) { this.subject = subject; this.subject.attach(this); } public void update() { System.out.println("Hexadecimal String: " + Integer.toHexString(subject.getState())); } }
上面的代码演示了一个简单的观察者模式实现。Subject 对象维护一个观察者列表,并提供了用于添加、删除和通知观察者的方法。Observer 抽象类定义了一个抽象的 update 方法,具体的观察者类继承该抽象类并实现自己的 update 方法。
结语
上述只是几个常用的设计模式的 Java 实现示例,设计模式还有很多种类和变体。了解和熟悉这些模式对于设计良好的软件系统至关重要。通过应用适当的设计模式,我们可以使代码更具可读性、可维护性和可扩展性。