前言
按时完成日常,就像打游戏一样
装饰者模式
基本结构
component: 抽象组件,被装饰的抽象对象
public abstract class Component {
public abstract void operate(String type);
}
concretecomponent: 被装饰对象的具体实现
public class ConcreteComponent extends Component {
@Override
public void operate(String type) {
System.out.println("使用"+type+"手机");
}
}
decorator: 抽象的装饰者,继承抽象组件,内部持有抽象组件的引用
public abstract class Decorator extends Component {
private Component mComponent;
public Decorator(Component component){
mComponent=component;
}
@Override
public void operate(String type) {
mComponent.operate(type);
}
}
concretedecorator: 具体实现的装饰者,拥有自己的各自不同的私有方法去实现具体的逻辑
public class AndroidDecorator extends Decorator {
public AndroidDecorator(Component component) {
super(component);
}
@Override
public void operate(String type) {
super.operate(type);
getSystemName();
installApp();
}
private void getSystemName(){
System.out.println("刷入小米系统");
}
private void installApp(){
System.out.println("安装微信");
}
}
public class IOSDecorator extends Decorator {
public IOSDecorator(Component component) {
super(component);
}
@Override
public void operate(String type) {
super.operate(type);
changeSystem();
installApp();
}
private void changeSystem(){
System.out.println("进行越狱");
}
private void installApp(){
System.out.println("自由的安装各种app");
}
}
main方法测试:
//装饰着模式测试方法
private static void testDecorator(){
ConcreteComponent concreteComponent=new ConcreteComponent();
AndroidDecorator androidDecorator=new AndroidDecorator(concreteComponent);
androidDecorator.operate("安卓");
System.out.println("__________________________________________");
IOSDecorator iosDecorator=new IOSDecorator(concreteComponent);
iosDecorator.operate("IOS");
}
输出结果:
使用安卓手机
刷入小米系统
安装微信
__________________________________________
使用IOS手机
进行越狱
自由的安装各种app
个人总结
在不影响其他对象的情况下,透明且动态的给单个对象添加职责,没有使用继承而是用组合的形式使具体的对象的功能更灵活的增加。