装饰者模式
装饰者模式可以在不修改原来类的基础上灵活的对他的功能进行扩展。
首先创建公共接口。被装饰对象以及装饰者都要实现它。
public interface Component {
void operate();
}
被装饰对象:
public class Car implements Component {
@Override
public void operate() {
System.out.println("车");
}
}
装饰者:
public abstract class Decorator implements Component {
private Component component;
public Decorator(Component component) {
this.component = component;
}
@Override
public void operate() {
component.operate();
add();
}
public abstract void add();
}
装饰细节:
public class NewCar extends Decorator {
public NewCar(Component component) {
super(component);
}
@Override
public void add() {
System.out.println("好");
}
}
验证:
public class MyClass {
public static void main(String[] args){
Component component=new Car();
component=new NewCar(component);
component.operate();
}
}
输出:
车
好
小结
典型使用在InputStream
中。
适配器模式
适配器模式是为了解决数据类型不用时转换的一种方法。
适配器(抽象或者接口)
public abstract class Adapter {
public abstract String convert();
}
需要适配的目标(输出):
public class View {
protected String data;
private Adapter adapter;
public void setAdapter(Adapter adapter) {
this.adapter = adapter;
data = adapter.convert();
}
}
适配的数据(输入):
public class ListData {
public String getData() {
return "1";
}
}
继承Adapter,重写适配方法:
public class ListAdapter extends Adapter {
private ListData listData;
public ListAdapter(ListData listData) {
this.listData = listData;
}
@Override
public String convert() {
return listData.getData();
}
}
使用:
public class MyClass {
public static void main(String[] ags) {
View view = new View();
view.setAdapter(new ListAdapter(new ListData()));
System.out.println(view.data);
}
}
小结
RecycleView,ListView。