设计模式七大原则之开放-封闭原则

开放-封闭原则

1.基本介绍
1)开闭原则(Open Closed Principle)是编程中最基础、 最重要的设计原则——面向对象设计的终极目标。
2)一个软件实体如类,模块和函数应该对扩展开放 (对提供方),对修改关闭(对使用方)。用抽象构建 框架,用实现扩展细节。
3)当软件需要变化时,尽量通过扩展软件实体的行 为来实现变化,而不是通过修改已有的代码来实现 变化。
4)编程中遵循其它原则,以及使用设计模式的目的 就是遵循开闭原则。

2、具体实现

方式一:

public class Open {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		GraphicDraw graphicdraw = new GraphicDraw();
		graphicdraw.drawgraph(2);
	}
}

class Rectangle {
	void draw() {
		System.out.println("矩形");
	}
}

class Circle {
	void draw() {
		System.out.println("圆形");
	}
}

class Triangle { // 新增三角形——肯定要改
	void draw() {
		System.out.println("三角形");
	}
}

class GraphicDraw {
	void drawgraph(int type) {
		if (type == 1) {
			Rectangle rec = new Rectangle();
			rec.draw();
		} else if (type == 2) {
			Circle c = new Circle();
			c.draw();
		} else if (type == 3) { // 新增绘制三角形
			Triangle t = new Triangle();
			t.draw();
		}
	}
}

方式一的优缺点:
1)优点是比较好理解,简单易操作。
2)缺点是违反了开闭原则(对扩展(提供方)开放,对 修改(使用方)关闭):需要给类增加新功能的时候, 尽量不要修改代码,或者尽可能少修改代码。
3)本例,需要新增一个图形种类时,修改的地方比较多。
改进思路: 发现Rectangle和Circle有共同的draw方法,创 建抽象Shape类做成基类,并提供抽象的draw方法,让子类 去实现,当需要新的图形时,只需要让新的图形继承Shape, 并实现draw方法。画图类GraphicDraw不出现具体的类, 用抽象类Shape。这样使用方的代码就不需要修改,满足开 闭原则。
方式二:

public class Open {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		GraphicDraw graphicdraw = new GraphicDraw();
		graphicdraw.drawgraph(new Circle());
		graphicdraw.drawgraph(new Rectangle());
		graphicdraw.drawgraph(new Triangle());

	}
}

abstract class Shape {
	public abstract void draw(); // 抽象方法
}

class GraphicDraw { // 新增绘制图形不需修改此类
	void drawgraph(Shape s) {
		s.draw();
	}
}

class Rectangle extends Shape {
	public void draw() {
		System.out.println("矩形");
	}
}

class Circle extends Shape {
	public void draw() {
		System.out.println("圆形");
	}
}

class Triangle extends Shape { // 新增三角形
	public void draw() {
		System.out.println("三角形");
	}
}

3、总结

  • Open-Closed Principle原则:一个软件实体应当对扩展开 放,对修改关闭。
  • 开闭原则(OCP)是面向对象设计中“可复用设计”的 基石,是面向对象设计中最重要的原则之一,其它很多 的设计原则都是实现开闭原则的一种手段。
  • 开闭原则中“开”,是指对于组件功能的扩展是开放的, 是允许对其进行功能扩展的;
  • 开闭原则中“闭”,是指对于原有代码的修改是封闭的, 即不应该修改原有的代码。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值