📜  设计模式-轻量级模式(1)

📅  最后修改于: 2023-12-03 15:12:08.693000             🧑  作者: Mango

设计模式-轻量级模式

什么是设计模式

设计模式是一种为设计问题提供解决方案的经验总结。在软件工程中,它是一些用于解决常见问题的惯用方案或最佳实践。

设计模式是解决特定问题的重复使用的方案,它不是可以直接用来转换为源代码或机器码的完成品。它是一种描述,在这种描述中提供了不同情况下需要做出的决策和选择途径,这样就不会重复发明已经有的解决方案。当你明白了解决问题的设计模式时,你可以将它应用于你的代码中。使用设计模式可以使代码更有可读性、可靠性和更加灵活。

什么是轻量级模式

轻量级模式是指解决小型或简单问题的设计模式。由于这些设计模式涉及到的问题不像其他问题那样大或复杂,因此轻量级模式被开发出来,以满足这些小型或简单的问题。

与其他设计模式不同,轻量级模式更加简单,更加注重实现过程的易用性。这些模式通常涉及很少的类和对象,因此代码更加简洁明了,更容易维护。

轻量级模式的优点
代码简单

轻量级模式的代码通常很简单,并且涉及的类和对象很少。因此,对于小型或简单问题,轻量级模式提供了最好的解决方案。

实现过程易用

轻量级模式注重实现过程的易用性。这种易用性使得轻量级模式成为开发人员的首选。

适用范围广

虽然轻量级模式通常适用于小型或简单问题,但它们也适用于大型或复杂问题。因为轻量级模式的代码设计非常清晰简单,因此它们可以方便地扩展到大型或复杂问题中。

常见的轻量级模式
单例模式

单例模式是一种创建型设计模式,被用于确保一个类只有一个实例,并且提供全局访问点。

单例模式的代码通常很简单,只需要一个私有的构造函数和一个实例化变量即可。这个实例化变量可以通过一个静态方法或一个全局变量来访问。由于单例模式的主要目的是确保只有一个实例,并且提供全局访问点,因此它经常被用于管理共享的资源,比如文件系统、网络连接、数据库连接等等。

单例模式的代码示例:

public class Singleton {
   // 声明一个私有构造函数
   private Singleton() {}
 
   // 声明一个单例实例变量
   private static Singleton instance = null;
 
   // 声明一个静态方法,用于获取单例实例
   public static Singleton getInstance() {
      if(instance == null) {
         instance = new Singleton();
      }
      return instance;
   }
}
工厂模式

工厂模式是一种创建型设计模式,用于创建对象而不需要指定对象的具体类。

工厂模式的核心思想是定义一个接口或一个抽象类,并利用这个接口或抽象类来创建具体的对象。客户端代码只需要知道这个接口或抽象类,而不需要知道具体的实现类。

工厂模式的代码示例:

public interface IProduct {
   void sayHello();
}
public class ProductA implements IProduct {
   public void sayHello() {
      System.out.println("Hello from ProductA");
   }
}
public class ProductB implements IProduct {
   public void sayHello() {
      System.out.println("Hello from ProductB");
   }
}
public class ProductFactory {
   public static IProduct getProduct(String type) {
      if(type.equals("A")) {
         return new ProductA();
      } else if(type.equals("B")) {
         return new ProductB();
      } else {
         return null;
      }
   }
}
观察者模式

观察者模式是一种行为型设计模式,用于在对象之间定义一对多的依赖关系,以便当一个对象状态发生改变时,所有依赖它的对象都能得到通知并自动更新。

观察者模式的核心思想是定义一个主题和一些观察者,当主题的状态发生变化时,它会通知所有观察者进行更新。观察者模式被广泛应用于GUI编程、事件处理等领域。

观察者模式的代码示例:

public interface IObserver {
   void update(int value);
}
public class Data implements Subject {
   private List<IObserver> observers = new ArrayList<>();
   private int value;
 
   public void register(IObserver observer) {
      observers.add(observer);
   }
 
   public void unregister(IObserver observer) {
      observers.remove(observer);
   }
 
   public void notifyObservers() {
      for(IObserver observer: observers) {
         observer.update(value);
      }
   }
 
   public void setValue(int value) {
      this.value = value;
      notifyObservers();
   }
}
public class Chart implements IObserver {
   public void update(int value) {
      System.out.println("Chart received update with value = " + value);
   }
}
public class Table implements IObserver {
   public void update(int value) {
      System.out.println("Table received update with value = " + value);
   }
}
public class ObserverPatternDemo {
   public static void main(String[] args) {
      Data data = new Data();
 
      Chart chart = new Chart();
      Table table = new Table();
 
      data.register(chart);
      data.register(table);
 
      data.setValue(10);
 
      data.unregister(chart);
 
      data.setValue(20);
   }
}
总结

轻量级模式是一种解决小型或简单问题的设计模式。比起其他设计模式,轻量级模式更加简单,更加注重实现过程的易用性。常见的轻量级模式包括单例模式、工厂模式和观察者模式。通过了解和应用这些轻量级模式,可以使代码更加简洁明了,更加易于维护。