`

设计模式---策略模式

 
阅读更多

 

读书笔记-----------------------

 

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

 

面向对象(OO)的四个基本概念是:抽象、封装、继承、多态。 

继承的好处是实现了代码的复用。 

 

软件设计原则1:多用组合,少用继承。使用组合的方式可以实现代码的分割,使代码有更大的弹性,更好地提高了复用性。 

软件设计原则2:封装变化--把软件中那些在将来可能产生变化的地方独立出来,与其他部分分割以减少变化时对它们的影响。这样的设计可以使系统变得有弹性,更好地应对变化。

软件设计原则3:针对接口编程,而不针对实现编程。依据该原则,声明一个变量时要把它声明为超类型(接口或抽象类),而不是实现类。 

 

 

我的理解-------------------------

1 将基类作为抽象类,其中包含行为接口。

2 在实现时,具体类继承基类,并且构造了实现接口的类的对象。

3 在选择上述具体对象时,实质就是在算法族中选择。表现为一种策略。

4 抽象类继承是为了将不变的部分尽可能进行复用;接口部分是将可能变化的部分进行封装,提供选择。

5 可以这样做的原因:接口上转型。

 

代码实例------------------- 

public abstract class Car {
	RunBehavior rb;

	public void go() {
		rb.go();
	}

	public void setRunBehavior(RunBehavior rb) {
		this.rb = rb;
	}

	public abstract void display();
}

public class Bus extends Car {
	public Bus() {
		rb = new RunWithGasoline();
	}

	@Override
	public void display() {
		// 公共汽车
	}
}

public class CarModel extends Car {
	public CarModel(){
		rb=new RunNoWay();
	}
	
	@Override
	public void display() {
		// 汽车模型
	}
}

public interface RunBehavior {
	public void go();
}

public class RunWithGasoline implements RunBehavior {
	public void go() {
		// 用汽油驱动
	}
}

public class RunWithElectricity implements RunBehavior {
	public void go() {
		// 用电力驱动
	}
}

public class RunNoWay implements RunBehavior {
	public void go() {
		// 不能行使
	}
}

//现在新增一种玩具电动车:
public class ToyCar extends Car {
	public ToyCar(){
		rb=new RunWithElectricity();
	}
	
	@Override
	public void display() {
		// 玩具电动车
	}
}

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics