七大设计原则之开闭原则

首页 » 设计模式 » 七大设计原则之开闭原则

当程序需要变化时,尽量通过扩展程序的实体行为来实现变化,而不是通过修改已有代码来实现变化

package 开闭原则;

public class ocp {
public static void main(String[] args) {
 Graph graph=new Graph();
 graph.draw(new juxing());
 graph.draw(new yuan());
 /*
  * 存在的问题
  * 违反ocp原则,即对扩展开放(提供方),对修改关闭(使用方)
  * 如果要新增加一个图形,则需要修改的地方太多
  */
 //四个修改
 graph.drawsanjiao(new sanjiao());
}
}
//使用方(这里使用方也修改两代码,但是ocp原则不允许使用方修改代码)
class Graph{
 //接收Shpae对象,然后根据type来绘制不同图形
 public void draw(Shape s) {
  if(s.m_type==1) {
   drawju(s);
  }else if(s.m_type==2) {
   drawyuan(s);
  }else if(s.m_type==3) {
   //三个修改
   drawsanjiao(s);
  }
 }
 public void drawju(Shape r) {
  System.out.println("画矩形");
 }
 public void drawyuan(Shape r) {
  System.out.println("画圆形");
 }
 //画三角形
 //两个修改
 public void drawsanjiao(Shape r) {
  System.out.println("画三角形");
 }
}
//基类
class Shape{
 int m_type;
}
class juxing extends Shape{
 juxing() {
  super.m_type=1;
 }
}
class yuan extends Shape{
 yuan(){
  super.m_type=2;
 }
 
}
//新增三角形
//一个修改
class sanjiao extends Shape{
 sanjiao(){
  super.m_type=3;
 }
}

改进后

package 开闭原则;

public class ocp {
public static void main(String[] args) {
 Graph graph=new Graph();
 graph.draw(new juxing());
 graph.draw(new yuan());

 graph.draw(new sanjiao());
}
}
//使用方
class Graph{
public void draw(Shape s) {
 s.draw();
}
}
//基类
abstract class Shape{
 public abstract void draw();
}
class juxing extends Shape{
 @Override
 public void draw() {
  // TODO Auto-generated method stub
  System.out.println("画矩形");
 }
}
class yuan extends Shape{
 @Override
 public void draw() {
  // TODO Auto-generated method stub
  System.out.println("画圆形");
 }
 
}
//新增三角形
//一个修改
class sanjiao extends Shape{
 @Override
 public void draw() {
  // TODO Auto-generated method stub
  System.out.println("画三角形");
 }
}
分享到:
赞(0) 打赏

评论 2

评论前必须登录!

 

  1. #1

    以后多发点哦

    你哥4个月前 (05-26)
  2. #2

    我给你点赞了

    渣渣混4个月前 (05-26)

觉得文章有用就打赏一下弟弟吧

支付宝扫一扫打赏

微信扫一扫打赏

Vieu4.5主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。
正在播放:

作者想对您说:

累了就停下来听首歌吧

听完后会给您一个好心情

最后

等到您不容易

还希望您能多待一会儿

      00:00/00:00