前言
装饰设计模式系列文章
装饰设计模式(一) - 吃饭小示例
装饰设计模式(二) - RecyclerView添加头部和底部
装饰设计模式(三) - 源码中用到的装饰设计模式
1. 装饰设计模式定义?
1>:定义?
- 装饰设计模式也称包装设计模式,用来动态的扩展对象的功能,也可以替代继承;
- 说白了,就是在不使用继承的方式下,采用装饰设计模式可以扩展一个对象的功能,使一个对象变得越来越强大;
2>:如何写?
一般都是把 类的对象作为构造方法的参数 传递 即可;
2. 装饰设计模式小示例代码如下
对于装饰设计模式,自己写的一个小示例,就是吃饭
1>:首先写一个吃饭的接口 Eat;
/**
* Email: 2185134304@qq.com
* Created by Novate 2018/5/12 16:42
* Version 1.0
* Params:
* Description:
*/
public interface Eat {
// 吃饭
void eat() ;
}
2>:定义一个类:PersonEat,人吃饭,是一种行为
/**
* Email: 2185134304@qq.com
* Created by Novate 2018/5/12 16:43
* Version 1.0
* Params:
* Description: 人吃饭 - 吃饭是一种行为
*/
public class PersonEat implements Eat {
@Override
public void eat() {
Log.e("TAG" , "人吃饭吃菜") ;
}
}
3>:然后定义两个具体吃饭的对象:老师TeacherEat 和 学生吃饭StudentEat,然后把 人吃饭PersonEat 作为构造参数 传递给 老师TeacherEat 和 学生吃饭StudentEat,最后调用 人吃饭 方法即可,代码如下:
- a:老师TeacherEat代码如下:
/**
* Email: 2185134304@qq.com
* Created by Novate 2018/5/12 17:03
* Version 1.0
* Params:
* Description: 老师吃饭
*/
public class TeacherEat implements Eat {
private Eat eat ;
/**
* 给老师吃饭传入 人吃饭的构造参数
*/
public TeacherEat(PersonEat eat){
this.eat = eat ;
}
@Override
public void eat() {
Log.e("TAG" , "喝个汤") ;
Log.e("TAG" , "点个菜") ;
eat.eat();
Log.e("TAG" , "盘子不用送") ;
}
}
- b:学生吃饭 StudentEat,代码如下:
/**
* Email: 2185134304@qq.com
* Created by Novate 2018/5/12 16:44
* Version 1.0
* Params:
* Description: 学生吃饭
*/
public class StudentEat implements Eat {
private Eat eat ;
/**
* 给学生吃饭传入 人吃饭的构造参数
*/
public StudentEat(PersonEat eat){
this.eat = eat ;
}
@Override
public void eat() {
Log.e("TAG" , "学生点个菜") ;
eat.eat();
Log.e("TAG" , "盘子送回指定的地点") ;
}
}
4>:最后在MainActivity中测试,代码如下:
/**
* Email: 2185134304@qq.com
* Created by Novate 2018/5/12 17:06
* Version 1.0
* Params:
* Description:
*/
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 装饰设计模式怎样写? 一般都是把 类的对象作为构造的参数 传递
// new对象 人吃饭
PersonEat personEat = new PersonEat() ;
// new具体的老师吃饭,然后把 人吃饭的类对象作为构造的参数 传递,然后调用方法
TeacherEat teacherEat = new TeacherEat(personEat) ;
teacherEat.eat();
}
}
以上就是 简单的装饰设计模式 —— 吃饭案例
3. 装饰设计模式的核心
如MainActivity中写的:把类的对象PersonEat 作为构造方法的参数 传递即可;