设计模式学习3——装饰者模式(Decorator)
没想到鼻炎还要做手术,这应该是出生到现在的第一个手术吧,据说是个小手术,呵呵,应该没有什么问题吧,不过得有10天左右的手术及休养时间,不知道设计模式的学习会不会被打断,嘿嘿。
装饰者模式
官方解释:……
个人理解:如果要把多个类组合在一起,形成新的对象,除了使用继承然后多态,使用装饰者模式更加合适,不过据说这样的话,会出现很多的小类,导致代码的可理解性变差……
小实例: 技术支持中心的“老成员”们都有一起吃鸡蛋炒拉面的经历,这不,拉面店的老板要把他的生意“信息化、自动化”。拉面店大约有三四十种拉面吧,其中拉面都是一样的,只不过放进的佐料不同而已,比如:牛肉炒拉面、鸡蛋炒碰面等等。这情形最适合装饰者模式了。 画个图吧
上面的图是HeadFirst电子书里的,自己偷了个小懒,没有重新去画,于是上面的图只是介绍装饰者模式的,和下面的代码原理一样,不过不是下面代码的类图:
装饰者们的代码:
测试一下吧:
测试结果截图:
装饰者模式
官方解释:……
个人理解:如果要把多个类组合在一起,形成新的对象,除了使用继承然后多态,使用装饰者模式更加合适,不过据说这样的话,会出现很多的小类,导致代码的可理解性变差……
小实例: 技术支持中心的“老成员”们都有一起吃鸡蛋炒拉面的经历,这不,拉面店的老板要把他的生意“信息化、自动化”。拉面店大约有三四十种拉面吧,其中拉面都是一样的,只不过放进的佐料不同而已,比如:牛肉炒拉面、鸡蛋炒碰面等等。这情形最适合装饰者模式了。 画个图吧
上面的图是HeadFirst电子书里的,自己偷了个小懒,没有重新去画,于是上面的图只是介绍装饰者模式的,和下面的代码原理一样,不过不是下面代码的类图:
package component;
public class Lamian extends Mian {
public float UseTime() {
return 30;
}
}
//-------下面是另一个文件了,这就是component
package component;
public abstract class Mian {
String name;
public String getName() {
return name;
}
public abstract float UseTime();
}
public class Lamian extends Mian {
public float UseTime() {
return 30;
}
}
//-------下面是另一个文件了,这就是component
package component;
public abstract class Mian {
String name;
public String getName() {
return name;
}
public abstract float UseTime();
}
装饰者们的代码:
装饰者
测试一下吧:
测试
测试结果截图: