设计模式-状态模式

(#)原因

本来不想写设计模式的东西,因为我觉得这个谁都懂,我们每天在写代码的时候,不知不觉就在使用设计模式,但是最近接了一些新的项目,在维护老代码的时候

发现各种问题,代码很烂,及其难扩展,遂看了重构,发现要想看懂这本书必须要熟悉各种设计模式,所以开始写设计模式系列博客

(#)状态模式

当一个对象的行为,取决与他的状态的时候,最适合使用这种方式写代码,比如一个对象的属性发生改变的时候,那么这个对象的同一个方法表现出来的动作是不一样的,

talk is cheap show you the code

(#)code

首先我们定义一个抽象类

public abstract class Price {
    private double money;

    public Price() {
    }

    public Price(double money) {
        this.money = money;
    }

    public double getMoney() {
        return money;
    }

    public void setMoney(double money) {
        this.money = money;
    }

    abstract double getChange(int days);
}

其次定义两个状态类

/**
 * Author: scw
 * Time: 16-11-22
 */
public class ChildPrice extends Price {
    public ChildPrice() {
    }

    public ChildPrice(double money) {
        super(money);
    }

    @Override
    double getChange(int days) {
        return super.getMoney()*days*2;
    }
}

 

/**
 * Author: scw
 * Time: 16-11-22
 */
public class RegularPrice extends Price {
    public RegularPrice() {
    }

    public RegularPrice(double money) {
        super(money);
    }

    @Override
    double getChange(int days) {
        return super.getMoney()*4*days;
    }
}

 最后我们定义一个主体类来承载这个状态

/**
 * Author: scw
 * Time: 16-11-22
 */
public class Movie {
    private Price price;

    public Movie(Price price) {
        this.price = price;
    }

    public double getChange(int days){
        return price.getChange(days);
    }
}

最后写一个main方法跑跑看:

 public static void main(String[]args){
        ChildPrice childPrice = new ChildPrice(1.1);
        RegularPrice regularPrice = new RegularPrice(1.1);
        Movie movie = new Movie(childPrice);
        System.out.println(movie.getChange(1));
        movie = new Movie(regularPrice);
        System.out.println(movie.getChange(1));
    }

这么实现的代码之后,其实完全符合设计模式的单一原则,里氏替换原则,以及开闭原则,很容易扩展以及维护

  

 

转载于:https://www.cnblogs.com/wscit/p/6091529.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值