装饰模式
一、什么是装饰模式
装饰(Decorator)模式又叫做包装模式。通过一种对客户端透明的方式来扩展对象的功能,是继承关系的一个替换方案。
二、装饰模式的结构
三、装饰模式的角色和职责
抽象组件角色: 一个抽象接口,是被装饰类和
装饰类的父接口。
具体组件角色:为抽象组件的实现类。
抽象装饰角色:包含一个组件的引用,并定义了
与抽象组件一致的接口。
具体装饰角色:为抽象装饰角色的实现类。负责
具体的装饰四、代码
package org.fbm.decorator;
public interface MobilePhone {
public void call();
public void show();
}
package org.fbm.decorator;
public class OrdinaryMobilePhone implements MobilePhone {
public void call() {
System.out.println("普通手机打电话的功能");
}
public void show() {
this.call();
}
}
package org.fbm.decorator;
public abstract class Decorator implements MobilePhone {
private MobilePhone mobilePhone;
public Decorator(MobilePhone mobilePhone){
this.mobilePhone=mobilePhone;
}
public MobilePhone getMobilePhone() {
return mobilePhone;
}
public void setMobilePhone(MobilePhone mobilePhone) {
this.mobilePhone = mobilePhone;
}
public abstract void show();
}
package org.fbm.decorator;
public class ColorMobilePhone extends Decorator {
public ColorMobilePhone(MobilePhone mobilePhone) {
super(mobilePhone);
}
public void call() {
}
public void photograph(){
System.out.println("彩屏手机可以拍照");
}
public void show() {
this.getMobilePhone().show();
this.photograph();
}
}
package org.fbm.decorator;
public class SmartMobilePhone extends Decorator {
public SmartMobilePhone(MobilePhone mobilePhone) {
super(mobilePhone);
}
public void call() {
}
public void Internet(){
System.out.println("智能手机可以上网");
}
public void show() {
this.getMobilePhone().show();
this.Internet();
}
}
package org.fbm.decorator;
public class MainClass {
public static void main(String[] args) {
System.out.println("-----------------普通手机-------------------");
MobilePhone omp=new OrdinaryMobilePhone();
omp.show();
System.out.println("-----------------彩屏手机-------------------");
MobilePhone cmp=new ColorMobilePhone(omp);
cmp.show();
System.out.println("-----------------智能手机-------------------");
MobilePhone smp=new SmartMobilePhone(cmp);
smp.show();
}
}