1.单例模式
public class Singletion {
private Context context;
public Context getContext(){//获取Context
return context;
}
private static final Singletion mInstance = new Singletion();
private Singletion() { }
public static Singletion getInstance() {
return mInstance;
}
public void initContext(Context context){
this.context=context;
}//传Context
}
2.builder模式
public class Student {
private final int stuId;//必须
private final String name;//必须
private final int age;//可选
private final int gender;//可选
private final String address;//可选
@Override
public String toString() {//方便打印
return "Student{" +
"stuId=" + stuId +
", name='" + name + '\'' +
", age=" + age +
", gender=" + gender +
", address='" + address + '\'' +
'}';
}
public int getStuId() {
return stuId;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public int getGender() {
return gender;
}
public String getAddress() {
return address;
}
//Student的构造函数 用于回传
private Student(StudentBuilder builder){
this.stuId = builder.stuId;
this.name = builder.name;
this.age = builder.age;
this.gender = builder.gender;
this.address = builder.address;
}
public static class StudentBuilder{
private final int stuId;
private final String name;
private int age;
private int gender;
private String address;
//构造方法,开放给外面调用
public StudentBuilder(int stuId,String name){//必须属性
this.stuId = stuId;
this.name = name;
}
//下面是一些属性的设置 保存在当前类
public StudentBuilder setAge(int age){
this.age = age;
return this;
}
public StudentBuilder setGender(int gender){
this.gender = gender;
return this;
}
public StudentBuilder setAddress(String address){
this.address = address;
return this;
}
//通过build方法,把学生的属性传给Student的构造函数
public Student build(){//新建一个Student
return new Student(this);
}
}
}
3.责任链模式
public abstract class Leader {
/**
* 上级领导处理者
*/
public Leader nextHandler;
/**
* 处理报账请求
* @param money 能批复的报账额度
*/
public final void handleRequest(int money){
System.out.println(getLeader());//获取当前领导
if(money <=limit()){//自身能批复
handle(money);
}else{//批复额度不足,给下一个来处理
System.out.println("报账额度不足,提交领导");
if(null != nextHandler){//不是最后一个
nextHandler.handleRequest(money);
}
}
}
/**
* 自身能批复的额度权限
* @return 额度
*/
public abstract int limit();
/**
* 处理报账行为
* @param money 具体金额
*/
public abstract void handle(int money);
/**
* 获取处理者
* @return 处理者
*/
public abstract String getLeader();
}
public class Boss extends Leader{
@Override
public int limit() {
return Integer.MAX_VALUE;
}
@Override
public void handle(int money) {
System.out.println("老板批复报销"+ money +"元");
}
@Override
public String getLeader() {
return "当前是老板";
}
}
public class Manager extends Leader{
@Override
public int limit() {
return 10000;
}
@Override
public void handle(int money) {
System.out.println("经理批复报销"+ money +"元");
}
@Override
public String getLeader() {
return "当前是经理";
}
}
public class Director extends Leader {
@Override
public int limit() {
return 5000;
}
@Override
public void handle(int money) {
System.out.println("主管批复报销"+ money +"元");
}
@Override
public String getLeader() {
return "当前是主管";
}
}
public class GroupLeader extends Leader {
@Override
public int limit() {
return 1000;
}
@Override
public void handle(int money) {
System.out.println("组长批复报销"+ money +"元");
}
@Override
public String getLeader() {
return "当前是组长";
}
}
//构造各个领导对象
GroupLeader groupLeader = new GroupLeader();
Director director = new Director();
Manager manager = new Manager();
Boss boss = new Boss();
//设置上级领导处理者对象 链条
groupLeader.nextHandler = director;
director.nextHandler = manager;
manager.nextHandler = boss;
//发起报账申请
groupLeader.handleRequest(8000);
策略模式
//一个接口
public interface PriceStrategy {
int setPrice(int orgPrice);
}
//实现一个接口,打7折商品
public class SevenStrategy implements PriceStrategy {
public int setPrice(int orgPrice) {
System.out.println("打7折商品");
return (int) (orgPrice*0.7);
}
}
//实现一个接口,打5折商品
public class fiveStrategy implements PriceStrategy {
public int setPrice(int orgPrice) {
System.out.println("打5折商品");
return (int) (orgPrice*0.5);
}
}
//实现一个上下文对象
public class DstPrice {
private PriceStrategy mPriceStrategy;
public DstPrice(PriceStrategy mPriceStrategy){
this.mPriceStrategy=mPriceStrategy;
}
public int ExeCalPrice(int price) {
return mPriceStrategy.setPrice(price);
}
}
//调用
DstPrice dstPrice=new DstPrice(new SevenStrategy());
Logger.d("-- data --"+ dstPrice.ExeCalPrice(100));