您的位置:首页 > 移动开发 > Android开发

android设计模式之装饰模式(一)

2016-07-05 14:29 267 查看
装饰模式(Decorator Pattern)也称为包装模式,结构性设计模式之一,装饰模式通俗来讲,就拿人来说,人需要各式各样的衣着,不管你穿着怎样,但是对于个人本质来说是不变的,穿着,打扮等只是对人的一种装饰而已,这就是装饰模式。抽象的定义就是:动态地给一个对象天假一些额外的职责。就增加功能来说,装饰模式相比生成子类更灵活。他的使用场景:需要透明且动态的扩展类的功能时。废话不多说了,下面看看装饰模式的具体结构和实现。

一、装饰模式的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源码中的实现
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息