Java语言是一种广泛应用于企业级应用的编程语言,它具有丰富的类库和强大的面向对象特性。而在 Java 世界中,设计模式则是一种经典的编程思想,通过应用设计模式可以将程序中重复的代码剥离出来,使代码更易于维护和扩展,并增强程序的可复用性和可读性。
下面我们来看看 Java 中常见的设计模式及其运用场景:
单例模式
public class Singleton { private static Singleton instance; private Singleton() {} public static synchronized Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } }
单例模式保证一个类只有一个实例,并提供一个全局访问点。在需要管理一些唯一资源(比如配置文件,数据库连接等)的场景下,单例模式可以避免重复创建实例和浪费资源的问题。
工厂模式
public interface Shape { void draw(); } public class Circle implements Shape { @Override public void draw() { System.out.println("I'm a circle"); } } public class Rectangle implements Shape { @Override public void draw() { System.out.println("I'm a rectangle"); } } public 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; } }
工厂模式根据不同的条件创建不同的对象,将对象的创建和使用分离开来,避免了类与类之间的耦合。在需要大量对象创建的场景下(比如商品或者订单等),工厂模式可以提高代码的可复用性和灵活性。
观察者模式
public interface Observer { void update(String message); } public interface Subject { void attach(Observer observer); void detach(Observer observer); void notifyObservers(); } public class MessagePublisher implements Subject { private Listobservers = new ArrayList<>(); @Override public void attach(Observer observer) { observers.add(observer); } @Override public void detach(Observer observer) { observers.remove(observer); } @Override public void notifyObservers() { observers.forEach(observer ->observer.update("New message published.")); } } public class MessageSubscriber implements Observer { private String name; public MessageSubscriber(String name) { this.name = name; } @Override public void update(String message) { System.out.printf("%s received message: %s\n", name, message); } }
观察者模式定义了一种一对多的依赖关系,多个观察者对象同时监听某一个主题对象的状态变化。在需要多个对象协同工作的场景下(比如新闻发布和订阅系统等),观察者模式可以提高代码的可扩展性和灵活性。
以上是 Java 中常见的设计模式及其运用场景,每种设计模式都有其独特的特点,需要根据具体的场景来选择合适的设计模式。通过运用设计模式,可以使我们的程序变得更加优雅和简洁。