标题:Java面试题冲刺第十五天--设计模式
设计模式是软件开发中常用的一种解决问题的思想,起源于1988年,由四位作者(Erich Gamma、Richard Helm、Ralph Johnson、John Vlissides)集体著作了一本《设计模式:可复用面向对象软件的基础》。设计模式主要包括三种类型:创建型、结构型和行为型。本文将从设计模式的概念、分类和代码实现等方面为大家讲解设计模式的知识点。
设计模式的概念
设计模式是一套已被广泛接受的有关设计、实现和使用对象的经验性总结,在软件开发中具有非常重要的作用。它为软件开发中常见的问题提供了一种解决方案,帮助开发人员更快、更好地编写高质量的代码,达到提高代码的可读性、可维护性和可扩展性的目的。
在软件开发中,设计模式可以帮助开发人员快速解决特定的问题,提高软件的质量和效率。设计模式可以在不同的场景中使用,例如:单例模式可以用来保证对象的唯一性;工厂模式可以用来创建不同类型的对象;适配器模式可以用来把不兼容的接口转换为兼容的接口等等。
设计模式的最终目的是提高代码的复用性和可维护性,同时也提高软件的可扩展性,减轻了开发过程中的重复性工作开销。
设计模式的分类
- 创建型设计模式
创建型设计模式主要关注的是对象的创建过程,它主要包括以下类型:
- 单例模式(Singleton)
- 工厂模式(Factory)
- 抽象工厂模式(Abstract Factory)
- 生成器模式(Builder)
-
原型模式(Prototype)
-
结构型设计模式
结构型设计模式主要关注的是对象的组合,它主要包括以下类型:
- 适配器模式(Adapter)
- 桥接模式(Bridge)
- 组合模式(Composite)
- 装饰模式(Decorator)
- 外观模式(Facade)
- 享元模式(Flyweight)
-
代理模式(Proxy)
-
行为型设计模式
行为型设计模式主要关注的是对象之间的交互,它主要包括以下类型:
- 责任链模式(Chain of Responsibility)
- 命令模式(Command)
- 解释器模式(Interpreter)
- 迭代器模式(Iterator)
- 中介者模式(Mediator)
- 备忘录模式(Memento)
- 观察者模式(Observer)
- 状态模式(State)
- 策略模式(Strategy)
- 模板方法模式(Template Method)
- 访问者模式(Visitor)
示例说明
以创建型设计模式中的单例模式为例,代码实现如下:
public class Singleton {
private static Singleton instance = null;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
上述代码实现了单例模式,保证程序中只创建了一个Singleton类的实例。这里采用了懒汉式的方式,即直到用户调用getInstance方法时才创建实例。此实现方式可能会出现线程安全性问题,因此在多线程环境中建议使用双重检查锁定方式来解决。
以行为型设计模式中的观察者模式为例,代码实现如下:
import java.util.ArrayList;
import java.util.List;
public class Subject {
private List<Observer> observers = 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);
}
@Override
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);
}
@Override
public void update() {
System.out.println("Octal String: " + Integer.toOctalString(subject.getState()));
}
}
public class HexObserver extends Observer {
public HexObserver(Subject subject){
this.subject = subject;
this.subject.attach(this);
}
@Override
public void update() {
System.out.println("Hex String: " + Integer.toHexString(subject.getState()).toUpperCase());
}
}
public class ObserverPatternDemo {
public static void main(String[] args) {
Subject subject = new Subject();
new BinaryObserver(subject);
new OctalObserver(subject);
new HexObserver(subject);
System.out.println("First state change: 15");
subject.setState(15);
System.out.println("Second state change: 10");
subject.setState(10);
}
}
上述代码实现了观察者模式,当Subject类的状态发生变化时,它将通知其所有的观察者。在示例中,BinaryObserver、OctalObserver和HexObserver是三个观察者类,它们都继承自Observer类。Subject类是被观察的目标类。在ObserverPatternDemo类中创建了一个Subject实例,并注册了三个观察者。当Subject类的状态发送变化时,观察者类将会相应地输出不同的字符串。
以上两个例子展示了创建型和行为型两种设计模式的代码实现。实际开发中,设计模式的使用需要考虑到具体的情境及需求,在具备一定经验和技能的情况下合理地选择和使用设计模式,对于提升代码质量、可读性、可维护性以及扩展性有着重要的作用。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java面试题冲刺第十五天–设计模式 - Python技术站