设计模式--策略模式和职责链模式

1、策略模式

package com.yqj.pattern.strategy;

abstract class Duck{
    //属性,策略接口
    protected FlyBehavior flyBehavior;

    public Duck(FlyBehavior flyBehavior) {
        this.flyBehavior = flyBehavior;
    }

    public abstract void display();

    public void quack(){
        System.out.println("鸭子嘎嘎叫");
    }

    public void swim(){
        System.out.println("鸭子会游泳");
    }

    public void fly(){
        if (flyBehavior!=null){
            flyBehavior.fly();
        }
    }

    public void setFlyBehavior(FlyBehavior flyBehavior) {
        this.flyBehavior = flyBehavior;
    }
}

class PekingDuck extends Duck{


    public PekingDuck() {
        super(new BadFlyBehavior());
    }

    @Override
    public void display() {
        System.out.println("北京鸭");
    }
}

class ToyDuck extends Duck{

    public ToyDuck() {
        super(new UnFlyBehavior());
    }

    @Override
    public void display() {
        System.out.println("玩具鸭");
    }
}

class WildDuck extends Duck{

    public WildDuck() {
        super(new GoodFlyBehavior());
    }

    @Override
    public void display() {
        System.out.println("野鸭");
    }
}

interface FlyBehavior{
    void fly();
}

class BadFlyBehavior implements FlyBehavior{

    @Override
    public void fly() {
        System.out.println("飞翔技术一般");
    }
}

class GoodFlyBehavior implements FlyBehavior{

    @Override
    public void fly() {
        System.out.println("飞翔技术高超");
    }
}

class UnFlyBehavior implements FlyBehavior{

    @Override
    public void fly() {
        System.out.println("不会飞翔");
    }
}

public class Client {
    public static void main(String[] args) {
        Duck wildDuck = new WildDuck();
        wildDuck.fly();
        System.out.println("=====");
        Duck pekingDuck = new PekingDuck();
        pekingDuck.fly();
        pekingDuck.setFlyBehavior(new UnFlyBehavior());
        pekingDuck.fly();
        System.out.println("=====");
        Duck toyDuck = new ToyDuck();
        toyDuck.fly();
    }
}

2、职责链模式

package com.yqj.pattern.responsibility;

class PurchaseRequest{
    private Integer id;
    private Float price;

    public PurchaseRequest(Integer id, Float price) {
        this.id = id;
        this.price = price;
    }

    public Integer getId() {
        return id;
    }

    public Float getPrice() {
        return price;
    }
}

//抽象类,定义处理请求的审批人
abstract class Approver{
    protected Approver approver;
    protected String name;

    public Approver(String name) {
        this.name = name;
    }

    public void setApprover(Approver approver) {
        this.approver = approver;
    }

    public abstract void processRequest(PurchaseRequest request);
}

class DepartmentApprover extends Approver{

    public DepartmentApprover(String name) {
        super(name);
    }

    @Override
    public void processRequest(PurchaseRequest request) {
        if (request.getPrice() <= 5000){
            System.out.println("请求编号:"+request.getId()
                    +" 金额:"+request.getPrice()+"被"+this.name+"处理");
        }else {
            approver.processRequest(request);
        }
    }
}

class CollegeApprover extends Approver{

    public CollegeApprover(String name) {
        super(name);
    }

    @Override
    public void processRequest(PurchaseRequest request) {
        if (request.getPrice() <= 10000 && request.getPrice() > 5000){
            System.out.println("请求编号:"+request.getId()
                    +" 金额:"+request.getPrice()+"被"+this.name+"处理");
        }else {
            approver.processRequest(request);
        }
    }
}

class ViceSchoolMasterApprover extends Approver{

    public ViceSchoolMasterApprover(String name) {
        super(name);
    }

    @Override
    public void processRequest(PurchaseRequest request) {
        if (request.getPrice() <= 30000 && request.getPrice() > 10000){
            System.out.println("请求编号:"+request.getId()
                    +" 金额:"+request.getPrice()+"被"+this.name+"处理");
        }else {
            approver.processRequest(request);
        }
    }
}

class SchoolMasterApprover extends Approver{

    public SchoolMasterApprover(String name) {
        super(name);
    }

    @Override
    public void processRequest(PurchaseRequest request) {
        if (request.getPrice() > 30000){
            System.out.println("请求编号:"+request.getId()
                    +" 金额:"+request.getPrice()+"被"+this.name+"处理");
        }else {
            approver.processRequest(request);
        }
    }
}


public class Client {
    public static void main(String[] args) {
        //创建请求
        PurchaseRequest request = new PurchaseRequest(233, 6000.0f);
        //创建审批人
        Approver departmentApprover = new DepartmentApprover("系主任");
        Approver collegeApprover = new CollegeApprover("院长");
        Approver viceSchoolMasterApprover = new ViceSchoolMasterApprover("副校长");
        Approver schoolMasterApprover = new SchoolMasterApprover("校长");
        //设置各级审批人下一个审批人(构成环形)
        departmentApprover.setApprover(collegeApprover);
        collegeApprover.setApprover(viceSchoolMasterApprover);
        viceSchoolMasterApprover.setApprover(schoolMasterApprover);
        schoolMasterApprover.setApprover(departmentApprover);

        departmentApprover.processRequest(request);
        viceSchoolMasterApprover.processRequest(request);

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值