Java设计模式——策略模式

策略模式是利用Java面向对象的多态性实现的。

举一个例子来说明策略模式的设计思想。

    现有一家银行,办理业务的流程为:叫号,办理业务,离开;服务的客户有三类,老人,年轻人,土豪;这三类客户办理业务的流程都是一样的,但是在具体实现细节上却有差异。当我们在编写代码时,不可能为每一类客户重写一遍代码,这样效率会很低,而且代码冗余会很高。在我们的设想中,应该是用同一套代码,实现不同对象进来时显示出不同的效果,且当对象类型增多时,不需要修改这套流程。

     而在Java中,多态性恰好能够实现这样的效果。下面贴代码。

 

先设计一个抽象类Person类,定义规则(即将业务流程设计成抽象方法)。

package bank;

public abstract class Person {
    private String name;

    public void setName(String name){
        this.name=name;
    }
    public String getName(){
        return this.name;
    }

    //叫号
    public abstract void callNumber();
    //办理业务
    public abstract void transact();
    //离开
    public abstract void leave();
}

在分别为老人、年轻人、土豪设计一个类,继承Person类,并实现其中的抽象方法。

package bank;

public class OldMan extends Person{

    public OldMan(){}
    public OldMan(String name) {
        this.setName(name);
    }

    //叫号
    public void callNumber(){
        System.out.println("老年人叫号");
    }
    //办理业务
    public void transact(){
        System.out.println("老年人办理业务");
    }
    //离开
    public void leave(){
        System.out.println("老年人办完业务,离开了");

    }
}
package bank;

public class YoungMan extends Person{


    public YoungMan(){}

    public YoungMan(String name){
        this.setName(name);
    }

    //叫号
    public void callNumber() {
        System.out.println("年轻人叫号");
    }
    public void transact() {
        System.out.println("年轻人办理业务");
    }

    public void leave(){
        System.out.println("年轻人办完业务离开了");
    }
}


--------------------------------------------------------------------


package bank;

public class Toff extends Person{

    public Toff(){}

    public Toff(String name){
        this.setName(name);
    }

    //叫号
    public void callNumber(){
        System.out.println("土豪叫号");
    }

    public void transact(){
        System.out.println("土豪办理业务");
    }

    public void leave(){
        System.out.println("土豪办完业务离开了");
    }
}





最后,设计出银行类。在该类中,我们传的参数是Person 类,就是在这里利用了Java的多态性。

package bank;

public class Bank {


    //开门迎接客户进来办理业务
    public void welcome(Person person){
        System.out.println("欢迎"+person.getName()+"前来办理业务");
        person.callNumber();
        person.transact();
        person.leave();
    }
}

测试类:

package bank;

/**
 * 该项目演示多态的用处
 */
public class test {
    public static void main(String[] args){
        Bank bank = new Bank();
       Person p = new Toff("土豪");
       //多态中能调用什么方法看new后面的类
       bank.welcome(p);

    }
}

在测试类中,我们通过使用Java多态性,在定义客户类型时,编译时类型为Person型,运行时类型为实际需要的客户类型。这样在给Bank类传参时,可以通过同一个类型传进去,但是在调用相同的方法时,却会因为子类中重写了该方法而现实子类中的方法,从而实现出我们想要的效果。

策略模式就是这种中间流程都固定,但是涉及到不同对象时,会根据情况进行一个策略选择。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值