Java言語によるデザインパターンの実践入門

王林
リリース: 2023-06-11 16:09:07
オリジナル
1169 人が閲覧しました

Java 言語によるデザイン パターンの実践の紹介

デザイン パターンは、ソフトウェアの設計および開発の問題を解決するための実績のあるアイデアおよび方法です。これらはソフトウェア開発の複雑さを軽減し、柔軟で再利用可能なコードを提供します。 Java 言語では、デザイン パターンの適用が非常に重要です。この記事では、Java 言語で一般的に使用されるいくつかの設計パターンとその実際のアプリケーションを紹介します。

  1. ファクトリ パターン

ファクトリ パターンは、オブジェクトを作成するためのデザイン パターンです。オブジェクト作成プロセスを単一のクラスにカプセル化するので、必要なときに新しいインスタンスを簡単に生成できます。ファクトリ パターンは、柔軟性を高めながら、コードの重複を効果的に削減できます。ファクトリ パターンの例を次に示します。

//定义接口
public interface Animal {
   void makeSound();
}

//定义实现类
public class Cat implements Animal{
   @Override
   public void makeSound() {
      System.out.println("Meow");
   }
}

public class Dog implements Animal{
   @Override
   public void makeSound() {
      System.out.println("Woof");
   }
}

public class AnimalFactory {
   public static Animal createAnimal(String animalType){
      if(animalType.equalsIgnoreCase("dog")){
         return new Dog();
      }
      else if(animalType.equalsIgnoreCase("cat")){
         return new Cat();
      }
      else return null;
   }
}

//测试
public class FactoryTest {
   public static void main(String[] args) {
      Animal myAnimal = AnimalFactory.createAnimal("dog");
      myAnimal.makeSound();
   }
}
ログイン後にコピー
  1. シングルトン パターン

シングルトン パターンは、クラスのインスタンスが 1 つだけであることを保証する設計パターンです。通常、リソースを制御し、個々のオブジェクトを管理するために使用されます。 Java のシングルトン パターンは、遅延スタイルまたはハングリー スタイルで実装できます。以下は、Hungry スタイルのシングルトン パターンの例です。

public class Singleton {
   private static Singleton uniqueInstance = new Singleton();
   private Singleton() {} 
   
   public static Singleton getInstance() {
      return uniqueInstance;
   }
}
ログイン後にコピー
  1. Observer パターン

Observer パターンは、オブジェクト (オブザーバーと呼ばれます) を登録するパターンです。トピックと呼ばれる別のオブジェクトを使用して、トピックが変更されたときに通知を受け取ります。 Observer パターンは、カップリング効果を引き起こすことなくオブジェクトが相互作用する疎結合システムを設計するのに役立ちます。 Observer パターンの例を次に示します。

//定义接口
public interface Observer {
   public void update(int temperature, int humidity, int pressure);
}

//实现类
public class WeatherData implements Subject {

   private ArrayList<Observer> observers;
   private int temperature;
   private int humidity;
   private int pressure;
   
   public WeatherData(){
      observers = new ArrayList<Observer>();
   }
   
   public void registerObserver(Observer o) {
      observers.add(o);
   }

   public void removeObserver(Observer o) {
      int i = observers.indexOf(o);
      if (i >= 0) {
         observers.remove(i);
      }
   }

   public void notifyObservers() {
      for (Observer observer : observers) {
         observer.update(temperature, humidity, pressure);
      }
   }
   
   public void measurementsChanged() {
      notifyObservers();
   }
   
   public void setMeasurements(int temperature, int humidity, int pressure) {
      this.temperature = temperature;
      this.humidity = humidity;
      this.pressure = pressure;
      measurementsChanged();
   }
}

//测试
public class WeatherStation {

   public static void main(String[] args) {
      WeatherData weatherData = new WeatherData();
      CurrentConditionsDisplay currentDisplay = new CurrentConditionsDisplay(weatherData);
      weatherData.setMeasurements(80, 65, 30.4f);
      weatherData.setMeasurements(82, 70, 29.2f);
   }
}
ログイン後にコピー
  1. Strategy パターン

Strategy パターンは、オブジェクトが動作をさまざまな実装に分離するパターンです。これにより、実行時にアルゴリズムの実装を選択できるようになり、柔軟性が高まります。戦略パターンは、重複を減らしながら再利用可能なコードを設計するのに役立ちます。

//定义接口
public interface FlyBehavior {
   public void fly();
}

public class FlyWithWings implements FlyBehavior {
   public void fly() {
      System.out.println("I'm flying!!");
   }
}

public interface QuackBehavior {
   public void quack();
}

public class Quack implements QuackBehavior {
   public void quack() {
      System.out.println("Quack");
   }
}

//策略模式实现类
public abstract class Duck {
   FlyBehavior flyBehavior;
   QuackBehavior quackBehavior;

   public void performFly() {
      flyBehavior.fly();
   }

   public void performQuack() {
      quackBehavior.quack();
   }

   public void setFlyBehavior(FlyBehavior fb) {
      flyBehavior = fb;
   }

   public void setQuackBehavior(QuackBehavior qb) {
      quackBehavior = qb;
   }
}

public class MallardDuck extends Duck {
   public MallardDuck() {
      quackBehavior = new Quack();
      flyBehavior = new FlyWithWings();
   }

   public void display() {
      System.out.println("I'm a real Mallard duck");
   }
}

//测试
public class MiniDuckSimulator {
 
    public static void main(String[] args) {
 
        Duck mallard = new MallardDuck();
        mallard.performQuack();
        mallard.performFly();
    }
}
ログイン後にコピー

概要:

デザイン パターンは、Java 言語における非常に便利なプログラミングのアイデアと手法です。ファクトリ パターン、シングルトン パターン、オブザーバー パターン、ストラテジ パターンはすべて一般的に使用される設計パターンであり、これらを実際に適用すると、プログラムの柔軟性と再利用性が大幅に向上します。本記事で解説するデザインパターンの内容が、読者の皆様のデザインパターンへの理解と実践の深化の一助になれば幸いです。

以上がJava言語によるデザインパターンの実践入門の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!