设计模式之装饰模式

mac2024-08-13  59

装饰模式(Decorator),亦可以理解为包装,就是一层层对原对象添加功能

定义:

动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。

特点:

装饰类(包装类)实现或继承原对象的接口或抽象类,又同时保持其引用;这样就可以设计很多装饰类的子类,每个子类就可以进行一次装饰或包装,就可以将原对象一层层地进行包装。

示例:

人形象装扮示例:

代码:

/** * 装饰对象 */ public class Person { private final static String TAG = "Person"; private String mName; public Person() {} public Person(String name) { mName = name; } public void show() { Log.d(TAG, "这是" + mName + ", 它穿着 "); } } /** * 装饰类:继承Person,同时保持Person的引用 */ public class Decorator extends Person { private final static String TAG = "Decorator"; private Person mPerson; public Decorator() {} public Decorator(String name) { super(name); } public void setPerson(Person person) { mPerson = person; } @Override public void show() { mPerson.show(); } } import android.util.Log; /** * 装饰TShirt */ public class TShirts extends Decorator { private final static String TAG = "TShirts"; public TShirts() {} public TShirts(String name) { super(name); } @Override public void show() { super.show(); Log.d(TAG, " TShirt "); } } import android.util.Log; /** * 装饰鞋子 */ public class Shoes extends Decorator { private final static String TAG = "Shoes"; public Shoes() {} public Shoes(String name) { super(name); } @Override public void show() { super.show(); Log.d(TAG, " Shoes "); } }

调用代码:

Person Gavin = new Person("Gavin"); TShirts ts = new TShirts(); Shoes sh = new Shoes(); //装饰过程 ts.setPerson(Gavin); sh.setPerson(ts); //展示 sh.show();

输出结果:

D/Person: 这是Gavin, 它穿着  TShirt  Shoes 

最后展示的过程就是,一层层包装的解包显示过程。

最新回复(0)