策略模式

假设这样一个场景:有一个银行,用户可以办理业务,用户身份有普通客户,土豪,和VIP客户,不同的用户有不同的办理业务过程。我们用来模拟一下。
银行:

public class Bank {

    //欢迎普通用户
    public void welcome(OrdinaryUser user){
        user.doSomething();
    }

    //欢迎土豪用户
    public void welcome(RichUser user){
        user.doSomething();
    }

    //欢迎Vip用户
    public void welcome(VipUser user){
        user.doSomething();
    }

}

普通用户:

public class OrdinaryUser {

    //普通用户办理业务
    public void doSomething(){
        System.out.println("普通用户来办理业务了");
        System.out.println("普通用户办理业务离开了。。。。。。");
    }
}

土豪用户:

public class RichUser {

    //土豪办理业务
    public void doSomething(){
        System.out.println("土豪客户大摇大摆的来办理业务了");
        System.out.println("土豪客户办理业务大摇大摆离开了。。。。。。");
    }

}

Vip用户:

public class VipUser {

    //Vip客户办理业务
    public void doSomething(){
        System.out.println("Vip客户高调的来办理业务了");
        System.out.println("Vip客户办理业务高调离开了。。。。。。");
    }
}

测试:

public class TestMain {
    public static void main(String[] args) {
        Bank bank = new Bank();
        OrdinaryUser ordinaryUser = new OrdinaryUser();
        RichUser richUser = new RichUser();
        VipUser vipUser = new VipUser();
        bank.welcome(ordinaryUser);
        bank.welcome(richUser);
        bank.welcome(vipUser);
    }
}

在这里插入图片描述
我们发现办理流程不管是什么用户都是办理流程(doSomthing())一样的,可不可以银行办理业务只留一个方法,让不同用户都适用呢,我们想到的是继承一个父类,创建对象的时候让父类引用指向子类,然后可以使用多态效果。

public class Person {
	public void doSomething() {
    }
}

让三种身份都继承此父类

public class OrdinaryUser extends Person{

    //普通用户办理业务
    public void doSomething(){
        System.out.println("普通用户来办理业务了");
        System.out.println("普通用户办理业务离开了。。。。。。");
    }
}

public class RichUser extends Person{

    //土豪办理业务
    public void doSomething(){
        System.out.println("土豪客户大摇大摆的来办理业务了");
        System.out.println("土豪客户办理业务大摇大摆离开了。。。。。。");
    }

}

public class VipUser extends Person{

    //Vip客户办理业务
    public void doSomething(){
        System.out.println("Vip客户高调的来办理业务了");
        System.out.println("Vip客户办理业务高调离开了。。。。。。");
    }
}
public class Bank {

    //欢迎
    public void welcome(Person person){
        person.doSomething();
    }


}
public class TestMain {
    public static void main(String[] args) {
        Bank bank = new Bank();
        Person ordinaryUser = new OrdinaryUser();//父类引用指向子类对象
        Person richUser = new RichUser();//父类引用指向子类对象
        Person vipUser = new VipUser();//父类引用指向子类对象
        bank.welcome(ordinaryUser);
        bank.welcome(richUser);
        bank.welcome(vipUser);
    }
}

在这里插入图片描述
这样只使用了一个方法就实现了不同角色的办理业务过程,利用了多态的特点(调用方法时,子类重写了则调用子类的)实现了一个策略模式,每个身份就是相当于一个策略;这就是一个简单的策略模式的思想。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值