android设计模式之装饰模式(一)
2016-07-05 14:29
267 查看
装饰模式(Decorator Pattern)也称为包装模式,结构性设计模式之一,装饰模式通俗来讲,就拿人来说,人需要各式各样的衣着,不管你穿着怎样,但是对于个人本质来说是不变的,穿着,打扮等只是对人的一种装饰而已,这就是装饰模式。抽象的定义就是:动态地给一个对象天假一些额外的职责。就增加功能来说,装饰模式相比生成子类更灵活。他的使用场景:需要透明且动态的扩展类的功能时。废话不多说了,下面看看装饰模式的具体结构和实现。
一、装饰模式的UML类图
要想熟悉一种设计模式的结构,除了多用,熟悉每个设计模式的类图也很重要,根据类图你可以得出模式的通用代码:
装饰模式的简单实现:
这就是装饰模式的简单结构,下一章会讲解装饰模式在android源码中的实现
一、装饰模式的UML类图
要想熟悉一种设计模式的结构,除了多用,熟悉每个设计模式的类图也很重要,根据类图你可以得出模式的通用代码:
装饰模式的简单实现:
/** * 抽象组件类,被装饰的抽象类,比如人,有一个穿衣服的行为 * @author hao * */ public abstract class Person { /** * 抽象方法 */ public abstract void dressed(); } /** * 组件的具体实现类,被装饰的具体组件,比如一个男孩 * @author hao * */ public class Boy extends Person{ @Override public void dressed() { //做你的具体逻辑操作 System.out.println("男孩穿了一件短裤"); } } /** * 抽象装饰者,用来装饰具体组件的类,即扩展Person类功能的抽象类 * @author hao * */ public abstract class Decorator extends Person{ private Person person; /** * 构造方法,初始化一个component对象 * @param component 组件 */ public Decorator(Person person) { this.person = person; } @Override public void dressed() { person.dressed(); } } /** * 装饰者的具体实现,用来扩展boy类功能,比如穿高档衣服的类ExpensiveDecoratorA * @author hao * */ public class ExpensiveDecoratorA extends Decorator{ public ExpensiveDecoratorA(Person person) { super(person); } @Override public void dressed() { //装饰的方法可以在父类方法之前调用,也可以之后调用 dressedJean(); super.dressed(); dressedShirt(); } public void dressedJean(){ //装饰的A方法逻辑 System.out.println("男孩穿了一件高档的牛仔裤"); } public void dressedShirt(){ //装饰的B方法逻辑 System.out.println("男孩穿了一件高档的短袖"); } } /** * activity测试 * @author hao * */ public class MainActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Person person = new Boy(); Decorator decorator = new ExpensiveDecoratorA(person); decorator.dressed(); } }
这就是装饰模式的简单结构,下一章会讲解装饰模式在android源码中的实现
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories