实用设计模式:用于构建可复用的代码

时光旅行者酱 2022-09-21 ⋅ 11 阅读

设计模式是一种经过验证的解决复杂软件设计问题的方案。它们是通过多年开发经验的总结和提炼而来,经过验证的,并被广泛接受和使用。在软件开发中,使用设计模式可以提高代码的可维护性、可扩展性和可复用性。

设计模式是一种将问题和解决方案之间的映射关系建立起来的方法。它们可以帮助我们在面对各种复杂的问题时提供一种结构化和模板化的解决方案。下面介绍一些常用的设计模式。

1. 单例模式

单例模式是一种创建型模式,它保证一个类只有一个实例,并提供一个全局访问点。在许多情况下,我们只需要一个对象来协调系统中的操作,此时单例模式非常有用。

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

2. 工厂模式

工厂模式是一种创建型模式,它定义了一个创建对象的接口,但具体的创建过程由子类来实现。工厂模式可以根据不同的情况创建不同的对象,而客户端只需要知道工厂类的方法来创建对象即可。

public interface Shape {
   void draw();
}

public class Circle implements Shape {
   public void draw() {
      System.out.println("Drawing Circle");
   }
}

public class Rectangle implements Shape {
   public void draw() {
      System.out.println("Drawing 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;
   }
}

3. 观察者模式

观察者模式是一种行为型模式,它定义了对象之间的一对多的依赖关系,当一个对象改变状态时,它的所有依赖者都会被通知并自动更新。观察者模式可以减少对象之间的耦合度,增强系统的灵活性。

public class Subject {
   private List<Observer> observers = new ArrayList<Observer>();
   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 ObserverPatternDemo {
   public static void main(String[] args) {
      Subject subject = new Subject();
      new BinaryObserver(subject);
      new OctalObserver(subject);

      System.out.println("First state change: 15");
      subject.setState(15);
      System.out.println("Second state change: 10");
      subject.setState(10);
   }
}

以上只是介绍了一些常用的设计模式,还有很多其他有用的设计模式,如装饰器模式、策略模式等。设计模式能够帮助开发人员构建可复用的代码,提高开发效率和代码质量。在开发过程中,根据具体的需求和问题选择合适的设计模式非常重要,它能够帮助我们提供高效、可维护和可扩展的软件解决方案。


全部评论: 0

    我有话说: