下面我们开始讲到面试必问的第六种设计模式:装饰模式
“装饰模式**
概念:
为了给一个对象增加功能:一个接口,一个具体类实现了方法,为了拓展方法,增加一个”装饰类”继承接口,(装饰类里声明被装饰类的实例),方法里面有旧实例的方法,然后加上新的方法即可完成拓展.
1.一个接口
2.一个类继承接口
3.另一个叫装饰类的也继承这个接口,为了拓展功能,并且持有"被装饰类"的实例,并能调用原来的方法
代码
//一个插座"接口"
interface Socket {
void useSoket();
}
//一个具体的插座"类"
class ConcreateSocket implements Socket {
@Override
public void useSoket() {
System.out.println("标准的排插,有三口和两口的");
}
}
//装饰类,也是一个具体的"插座类",实现同样的接口,持有被装饰类的实例
class XiaoMiSocket implements Socket {
ConcreateSocket cs;
public XiaoMiSocket(ConcreateSocket cs) {
this.cs = cs;
}
@Override
public void useSoket() {
//有了原本的功能,又有新的功能
cs.useSoket();
System.out.println("我是小米插头,有USB口的");
}
}
//测试
class Test {
public static void main(String[] args) {
//被装饰类(被增加功能)的实例
ConcreateSocket cs =new ConcreateSocket();
//装饰类,持有被装饰类的实例
Socket xiaomi = new XiaoMiSocket(cs);
xiaomi.useSoket();
}
}
输出:
标准的排插,有三口和两口的
我是小米插头,有USB口的
总结:
1.为了拓展功能
2.被装饰类(老的方法)和修饰类(新的方法),都继承一个接口(统一名字的方法)
3."修饰类"拥有"被修饰类"的实例,使用"自己"方法的时候,调用被修饰实例的方法,从而达到拓展功能的目的.