1.享元设计模式:
定义:使共享对象可有效的支持大量的细粒度的对象,核心其实就是对象复用
使用:Message,LayoutInflater,EventBus (PendingPost)
火车票
public class Ticket {
String from;
String to;
public Ticket(String from, String to) {
this.from = from;
this.to = to;
}
int getPrice(){
return new Random().nextInt(100)+28;
}
}
火车票工厂
public class TicketFactory {
//对象复用
public static Map<String ,Ticket> sTicketMap=new HashMap<>();
public static Ticket getTicket(String from,String to){
String key=from+"-"+to;
Ticket ticket = sTicketMap.get(key);
if(ticket!=null){
return ticket;
}
ticket=new Ticket(from,to);
sTicketMap.put(key,ticket);
return ticket;
}
}
测试
for(int i=0;i<1000;i++){
Ticket ticket = TicketFactory.getTicket("合肥","上海");
}
命令设计模式
定义:将一个请求封装成一个对象,从而让用户使用不同的请求把客户端参数化,对请求排队或者记录日志,以及支持可撤销的工作。
俄罗斯方块
public class TetrisMachine {
public void toLeft() {
System.out.println("向左");
}
public void toRight(){
System.out.println("向右");
}
}
命令接口:执行
public interface Command {
void execute();
}
左命令
public class LeftCommand implements Command {
TetrisMachine machine;
public LeftCommand(TetrisMachine machine) {
this.machine = machine;
}
@Override
public void execute() {
machine.toLeft();
}
}
右命令
public class RightCommand implements Command {
TetrisMachine machine;
public RightCommand(TetrisMachine machine){
this.machine=machine;
}
@Override
public void execute() {
machine.toRight();
}
}
按钮
public class Buttons {
public RightCommand rightCommand;
public LeftCommand leftCommand;
public void setRightCommand(RightCommand rightCommand) {
this.rightCommand = rightCommand;
}
public void setLeftCommand(LeftCommand leftCommand) {
this.leftCommand = leftCommand;
}
public void toRight() {
rightCommand.execute();
}
public void toLeft() {
leftCommand.execute();
}
}
测试
public class Client {
public static void main(String[] args) {
//俄罗斯方块
TetrisMachine machine=new TetrisMachine();
//左右命令
LeftCommand leftCommand=new LeftCommand(machine);
RightCommand rightCommand=new RightCommand(machine);
//按钮
Buttons buttons=new Buttons();
//设置两个命令
buttons.setLeftCommand(leftCommand);
buttons.setRightCommand(rightCommand);
//按钮执行命令
buttons.toRight();
buttons.toLeft();
buttons.toRight();
}
}
组合模式
定义:将对象组合成树形结构以表示 “部分-整体” 的层次结构,使得用户对单个对象和组合对象的使用具有一致性
与门面设计模式的区别,组合是 “部分-整体” 的关系,门面是单独的关系(依赖关系)
使用:ViewGroup , 用一个RecyclerView去实现一个 ExpendRecyclerView(两个RecyclerView嵌套的效果)