1.设计模式之策略模式

策略模式定义了算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户

1. 定义算法族

public interface FlyBehavior {
    
    
	String fly(); // 飞的行为
}
public interface QuackBehavior {
    
    
	String quack(); // 叫的行为
}
public class FlyNoWay implements FlyBehavior {
    
    	
	@Override
	public String fly() {
    
    
		return "I can't fly";
	}
}
public class FlyRocketPowered implements FlyBehavior {
    
      
    @Override
    public String fly() {
    
    
        return "I'm flying with a rocket";
    }
}
public class MuteQuack implements QuackBehavior {
    
    
	@Override
	public String quack() {
    
    
		return "Silence";
	}
}
public class Quack implements QuackBehavior {
    
    
	@Override
	public String quack() {
    
    
		return "Quack";
	}
}

2. 客户使用算法

public class ModelDuck extends Duck {
    
    
    FlyBehavior flyBehavior;
    QuackBehavior quackBehavior;

    public ModelDuck() {
    
    
        flyBehavior = new FlyNoWay();
        quackBehavior = new Quack();
    }

    @Override
    public String display() {
    
    
        return "I'm a model duck";
    }
}

其中Duck类为:

public abstract class Duck {
    
    
	FlyBehavior flyBehavior;
	QuackBehavior quackBehavior;
	
	public Duck(){
    
    		
	}
	
	public abstract String display();
	
	public String performFly(){
    
    
		return flyBehavior.fly();
	}
	
	public String performQuack(){
    
    
		return quackBehavior.quack();
	}
	
	public String swim(){
    
    
		return "All ducks float";
	}

	public void setFlyBehavior(FlyBehavior flyBehavior){
    
    
		this.flyBehavior = flyBehavior;
	}

	public void setQuackBehavior(QuackBehavior quackBehavior){
    
    
		this.quackBehavior = quackBehavior;
	}
}

体现设计原则: 发现变化,封装变化 多用组合,少用继承 针对接口编程,而非实现编程

猜你喜欢

转载自blog.csdn.net/SJshenjian/article/details/130772799