Java常见设计模式入门与实践

设计模式是软件开发中被反复应用的、为解决特定问题而总结出的最佳实践。它们提供了开发可重用、灵活和高效软件系统的方法。在Java中,设计模式可以帮助开发者编写更高质量的代码。以下是Java中一些常用设计模式的入门介绍及其实践示例。

1. 单例模式 (Singleton Pattern)

单例模式确保一个类只有一个实例,并提供一个全局访问点。

示例代码
public class Singleton {
    private static Singleton instance;

    private Singleton() {
        // 私有构造函数防止实例化
    }

    public static Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}

2. 工厂模式 (Factory Pattern)

工厂模式定义一个创建对象的接口,但让子类决定实例化哪一个类。工厂模式使一个类的实例化延迟到其子类。

示例代码
// 产品接口
public interface Product {
    void use();
}

// 具体产品类
public class ConcreteProduct implements Product {
    @Override
    public void use() {
        System.out.println("Using ConcreteProduct");
    }
}

// 工厂类
public class Factory {
    public Product createProduct() {
        return new ConcreteProduct();
    }
}

// 客户端代码
public class Main {
    public static void main(String[] args) {
        Factory factory = new Factory();
        Product product = factory.createProduct();
        product.use();
    }
}

3. 观察者模式 (Observer Pattern)

观察者模式定义了对象之间的一对多依赖,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。

示例代码
import java.util.ArrayList;
import java.util.List;

// 观察者接口
interface Observer {
    void update(String message);
}

// 具体观察者类
class ConcreteObserver implements Observer {
    private String name;

    public ConcreteObserver(String name) {
        this.name = name;
    }

    @Override
    public void update(String message) {
        System.out.println(name + " received: " + message);
    }
}

// 被观察者接口
interface Subject {
    void registerObserver(Observer observer);
    void removeObserver(Observer observer);
    void notifyObservers();
}

// 具体被观察者类
class ConcreteSubject implements Subject {
    private List<Observer> observers = new ArrayList<>();
    private String message;

    public void setMessage(String message) {
        this.message = message;
        notifyObservers();
    }

    @Override
    public void registerObserver(Observer observer) {
        observers.add(observer);
    }

    @Override
    public void removeObserver(Observer observer) {
        observers.remove(observer);
    }

    @Override
    public void notifyObservers() {
        for (Observer observer : observers) {
            observer.update(message);
        }
    }
}

// 客户端代码
public class Main {
    public static void main(String[] args) {
        ConcreteSubject subject = new ConcreteSubject();

        Observer observer1 = new ConcreteObserver("Observer 1");
        Observer observer2 = new ConcreteObserver("Observer 2");

        subject.registerObserver(observer1);
        subject.registerObserver(observer2);

        subject.setMessage("Hello, Observers!");
    }
}

4. 策略模式 (Strategy Pattern)

策略模式定义了算法家族,并且使它们之间可以互相替换。策略模式让算法的变化独立于使用算法的客户。

示例代码
// 策略接口
interface Strategy {
    int doOperation(int num1, int num2);
}

// 具体策略类
class Addition implements Strategy {
    @Override
    public int doOperation(int num1, int num2) {
        return num1 + num2;
    }
}

class Subtraction implements Strategy {
    @Override
    public int doOperation(int num1, int num2) {
        return num1 - num2;
    }
}

// 上下文类
class Context {
    private Strategy strategy;

    public Context(Strategy strategy) {
        this.strategy = strategy;
    }

    public int executeStrategy(int num1, int num2) {
        return strategy.doOperation(num1, num2);
    }
}

// 客户端代码
public class Main {
    public static void main(String[] args) {
        Context context = new Context(new Addition());
        System.out.println("10 + 5 = " + context.executeStrategy(10, 5));

        context = new Context(new Subtraction());
        System.out.println("10 - 5 = " + context.executeStrategy(10, 5));
    }
}

5. 装饰者模式 (Decorator Pattern)

装饰者模式动态地将责任附加到对象上。装饰者提供了比继承更有弹性的替代方案。

示例代码
// 组件接口
interface Component {
    void operation();
}

// 具体组件类
class ConcreteComponent implements Component {
    @Override
    public void operation() {
        System.out.println("ConcreteComponent operation");
    }
}

// 装饰者抽象类
abstract class Decorator implements Component {
    protected Component component;

    public Decorator(Component component) {
        this.component = component;
    }

    public void operation() {
        component.operation();
    }
}

// 具体装饰者类
class ConcreteDecorator extends Decorator {
    public ConcreteDecorator(Component component) {
        super(component);
    }

    @Override
    public void operation() {
        super.operation();
        addedBehavior();
    }

    private void addedBehavior() {
        System.out.println("ConcreteDecorator added behavior");
    }
}

// 客户端代码
public class Main {
    public static void main(String[] args) {
        Component component = new ConcreteComponent();
        Component decorator = new ConcreteDecorator(component);
        decorator.operation();
    }
}

总结

以上是一些常用设计模式的入门介绍及其Java实现示例。掌握这些设计模式有助于编写更加可维护、灵活和高效的代码。设计模式不仅仅是代码模板,更是一种思维方式,可以帮助开发者在面临复杂问题时找到最佳解决方案。通过不断的学习和实践,可以更好地理解和应用这些设计模式。

  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java设计模式是一种用于解决软件设计问题的经验总结,它们提供了一套被广泛接受的最佳实践,用于创建可维护、可扩展和可复用的代码。下面是一些常见Java设计模式及其实践: 1. 单例模式(Singleton Pattern):确保一个类只有一个实例,并提供全局访问点。它通常用于需要共享资源的情况,例如数据库连接池或日志记录器。 2. 工厂模式(Factory Pattern):定义一个创建对象的接口,但让子类决定实例化哪个类。它将对象的实例化过程与客户端代码解耦,提供了一种灵活的方式来创建对象。 3. 观察者模式(Observer Pattern):定义了一种一对多的依赖关系,当一个对象的状态发生变化时,所有依赖于它的对象都会收到通知并自动更新。它常用于事件驱动的系统中。 4. 装饰器模式(Decorator Pattern):动态地将责任附加到对象上,提供了一种灵活的方式来扩展功能。它可以在不修改原始类代码的情况下,通过组合多个装饰器来增加对象的行为。 5. 策略模式(Strategy Pattern):定义一系列算法,并将每个算法封装在独立的类中,使它们可以互换使用。它使得算法的变化不会影响到使用算法的客户端。 6. 适配器模式(Adapter Pattern):将一个类的接口转换成客户端所期望的另一个接口。它常用于集成已有代码或使不兼容的类能够一起工作。 7. 模板方法模式(Template Method Pattern):定义一个算法的骨架,将一些步骤的实现延迟到子类。它提供了一种在不改变算法结构的情况下,允许子类重新定义某些步骤的方式。 以上只是一些常见Java设计模式,还有其他模式如建造者模式、原型模式等。选择合适的设计模式可以提高代码的可读性、可维护性和可扩展性。在实践中,我们应当根据具体的需求和场景来选择合适的设计模式,并灵活运用它们。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值