本文共 1908 字,大约阅读时间需要 6 分钟。
装饰器模式是什么?装饰器模式属于结构型模式中的一种,允许向一个现有对象添加新的功能,同时又不改变其结构,作为现有类的一个包装
举个实例吧,就像我们女朋友出门前,必须要化妆,这个过程就可以抽象成一个装饰器模式,要打底,要涂口红,要扑粉,要画眉……一大堆操作,但是你让女朋友只画眉毛,那她肯定不乐意了啊,这个时候就必须再添加修饰
interface Showable{ public void show();//定义展现行为}class Girl implements Showable{ @Override public void show() { // TODO 自动生成的方法存根 System.out.print("女孩的素颜"); }}class Decorator implements Showable{ Showable showable; public Decorator(Showable showable) {//构造时注入素颜的女朋友 this.showable = showable; } @Override public void show() { // TODO 自动生成的方法存根 System.out.print("粉饰(");//化妆品粉饰 showable.show(); System.out.print(")"); }//化妆品粉饰器 }public class decoratorDemo { public static void main(String[] args) { // TODO 自动生成的方法存根 //用装饰器包裹女孩show出来 new Decorator(new Girl()).show(); }}
interface Showable{ public void show();}class Girl implements Showable{ public void show() { // TODO 自动生成的方法存根 System.out.print("素颜女孩"); }}abstract class Decorator implements Showable{ protected Showable showable; public Decorator(Showable showable) { this.showable = showable; } @Override public void show() { // TODO 自动生成的方法存根 showable.show(); }}class FoundationMakeup extends Decorator{ public FoundationMakeup(Showable showable) { super(showable); // TODO 自动生成的构造函数存根 } @Override public void show() { System.out.print("打粉底("); showable.show(); System.out.print(")"); } }class Lipstick extends Decorator{ public Lipstick(Decorator showable) { super(showable); // TODO 自动生成的构造函数存根 } @Override public void show() { System.out.print("涂口红("); showable.show(); System.out.print(")"); }}public class DecoratorDemoUpdate { public static void main(String[] args) { // TODO 自动生成的方法存根 //口红包裹粉底,再包裹女友 Showable madeupGirl = new Lipstick(new FoundationMakeup(new Girl())); madeupGirl.show(); }}
学习装饰器模式,会发现有点像java IO包里的众多流处理类
new BufferedReader(new InputStreamReader(new FileInputStream(filePath)));
但是,流处理类要比我们的例子复杂许多,但是基本思想和我们装饰器模式会有些相像,也有点想俄罗斯套娃一样,一层套一层的结构
转载地址:http://fgeii.baihongyu.com/