JAVA模式的六大原则之开闭原则

一、开闭原则的定义

        开闭原则明确的告诉我们:软件实现应该对扩展开放,对修改关闭,其含义是说一个软件实体应该通过扩展来实现变化,而不是通过修改已有的代码来实现变化的。那什么是软件实体呢?

        软件实体可以指一个软件模块、一个由多个类组成的局部结构或一个独立的类

        抽象化是开闭原则的关键。

二、开闭原则举例

       以销售水果为例,可以 销售苹果、梨等水果,水果有的特性,名城、价格等

       水果接口:

public interface Fruit {

	public String name();

	public double price();
}

      苹果类:

public class Apple implements Fruit {

	private String name;
	private double price;

	public Apple(String name, double price) {
		this.name = name;
		this.price = price;
	}

	@Override
	public String name() {
		return this.name;
	}

	@Override
	public double price() {
		return this.price;
	}

}
public class Pear implements Fruit {

	private String name;
	private double price;

	public Pear(String name, double price) {
		this.name = name;
		this.price = price;
	}

	@Override
	public String name() {
		return this.name;
	}

	@Override
	public double price() {
		return this.price;
	}

}

   实现:

Fruit fruit = new Apple("红富士", 2.5);
		String name = fruit.name();
		double price = fruit.price();
		Toast.makeText(this, name + "  " + price, Toast.LENGTH_SHORT).show();

但是在实际的过程中,我们需要做一些打折的操作,那在当前的设计下应该如何做呢?

1、修改接口

      修改接口会使接口和实现类都有变动,接口应该是稳定且可靠,不应该经常发生改变,否则接口作为契约的作用就失去了。因此,此方案否定。

2、修改实现类

      可以直接在价格方法中处理,但是此方法也有问题,那就是要得到打折前的价格呢?此方案不是最优选择

3、通过扩展实现变化

public class OffAppleFruit extends Apple {

	public OffAppleFruit(String name, double price) {
		super(name, price);
	}

	// 复写价格方法
	@Override
	public double price() {
		if (price > 2) {
			return price * 0.8;
		}
		return super.price();
	}
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值