インタフェースの適用:ポリシー・モード

1451 ワード

ストラテジーパターン(Strategy Pattern)は、一連のアルゴリズムを定義し、各アルゴリズムをカプセル化し、互いに置き換えて使用することができ、ストラテジーパターンは、その顧客アプリケーションとは独立してアルゴリズムを変化させる.
OO設計原則:
  • インタフェース向けプログラミング(抽象プログラミング向け)
  • パッケージ変化
  • 多用組合せ、少用継承
  • package com.main;
    
    //      
    public class StrategyPattern {
    
    	public static void main(String[] args) {
    		Duck trueDuck = new TrueDuck("   ");
    		trueDuck.setSwim(new SwimImpl());//          
    		trueDuck.swim();
    		System.out.println("--------------");
    		Duck modelDuck = new ModelDuck("    ");
    		modelDuck.setSwim(new NotSwimImpl());//          
    		modelDuck.swim();
    	}
    
    }
    
    //         (            )
    interface Swimable {
    	public void swim();
    }
    
    // Swimable      1
    class SwimImpl implements Swimable {
    
    	@Override
    	public void swim() {
    		System.out.println("   ");
    	}
    }
    
    // Swimable      2
    class NotSwimImpl implements Swimable {
    
    	@Override
    	public void swim() {
    		System.out.println("    ");
    	}
    }
    
    class Duck {
    	private String name;
    	//           ,          
    	private Swimable swim;
    
    	public void setSwim(Swimable swim) {
    		this.swim = swim;
    	}
    
    	public Duck(String name) {
    		this.name = name;
    	}
    
    	public void swim() {
    		System.out.print("  " + name + ",");
    		swim.swim();
    	}
    
    }
    
    //       
    class TrueDuck extends Duck {
    
    	public TrueDuck(String name) {
    		super(name);
    	}
    }
    
    //        
    class ModelDuck extends Duck {
    
    	public ModelDuck(String name) {
    		super(name);
    	}
    }