设计模式6大原则:开闭原则

开闭原则(Open Closed Principle)

福绵ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为成都创新互联公司的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:18980820575(备注:SSL证书合作)期待与您的合作!

开闭原则的核心是:对扩展开放,对修改关闭。

白话意思就是我们改变一个软件时(比如扩展其他功能),应该通过扩展的方式来达到软件的改变,而不应爱修改原有代码来实现变化。

开闭原则算是前5中原则的一个抽象总结,前五种是开闭原则的一些具体实现,所以如果使用开闭原则,其实有点虚,因为它没有一个固定的模式,但是最终保证的是提高程序的复用性、可维护性等要求。

要使用这一原则还需要结合着它的思想“对扩展开放,对修改关闭”与其他的五大设计原则根据经验来开发项目。

大体是这个意思,如果想深究,还需要看看其他的书籍。

下面是使用开闭原则的一个简单示例,虽有些不准确,但是是这个意思(领会精神)。

定义一个接口,寻找美女

 
 
 
  1. package com.loulijun.chapter6;
  2.  
  3. public interface IFindGirl {
  4.     //年龄
  5.     public int getAge();
  6.     //姓名
  7.     public String getName();
  8.     //长相
  9.     public String getFace();
  10.     //身材
  11.     public String getFigure();
  12. }

实现这个接口

 
 
 
  1. package com.loulijun.chapter6;
  2.  
  3. public class FindGirl implements IFindGirl {
  4.     private String name;
  5.     private int age;
  6.     private String face;
  7.     private String figure;
  8.      
  9.     public FindGirl(String name, int age, String face, String figure)
  10.     {
  11.         this.name = name;
  12.         this.age = age;
  13.         this.face = face;
  14.         this.figure = figure;
  15.     }
  16.  
  17.     @Override
  18.     public int getAge() {
  19.         return age;
  20.     }
  21.  
  22.     @Override
  23.     public String getFace() {
  24.         return face;
  25.     }
  26.  
  27.     @Override
  28.     public String getFigure() {
  29.         return figure;
  30.     }
  31.  
  32.     @Override
  33.     public String getName() {
  34.         return name;
  35.     }
  36.      
  37.  
  38. }

场景:大街上

 
 
 
  1. package com.loulijun.chapter6;
  2.  
  3. import java.text.NumberFormat;
  4. import java.util.ArrayList;
  5.  
  6. public class Street {
  7.     private final static ArrayList girls = new ArrayList();
  8.     //静态初始化块
  9.     static
  10.     {
  11.         girls.add(new FindGirl("张含韵",23,"可爱型","165cm/47kg"));
  12.         girls.add(new FindGirl("高圆圆",33,"时尚型","165cm/48kg"));
  13.         girls.add(new FindGirl("章泽天",19,"清纯型","168cm/47kg"));
  14.     }
  15.     public static void main(String args[])
  16.     {
  17.         System.out.println("----------美女在这里----------");
  18.         for(IFindGirl girl:girls)
  19.         {
  20.             System.out.println("姓名:"+girl.getName()+" 年龄:"+girl.getAge()+
  21.                     "  长相:"+girl.getFace()+"  身材:"+girl.getFigure());
  22.         }
  23.     }
  24. }

运行结果:

----------美女在这里----------

姓名:张含韵 年龄:23 长相:可爱型 身材:165cm/47kg
姓名:高圆圆 年龄:33 长相:时尚型 身材:165cm/48kg
姓名:章泽天 年龄:19 长相:清纯型 身材:168cm/47kg

但是如果想独立分出一个外国美女的类别的话(比如增加一个国籍),可以通过修改接口、修改实现类、通过扩展来实现。

如果修改接口,也就意味着修改实现类,这样对项目的变动太大了,所以不推荐

如果修改实现类,这样虽能解决问题,但是明显有些牵强,如果需要其他变动的时候会显得逻辑混乱

所以,通过扩展来实现是最简单的方式

如何扩展:

可以定义一个IForeigner接口继承自IFindGirl,在IForeigner接口中添加国籍属性getCountry(),然后实现这个接口即可,然后就只需要在场景类中做稍微修改就可以了

 
 
 
  1. package com.loulijun.chapter6;
  2.  
  3. public interface IForeigner extends IFindGirl {
  4.     //国籍
  5.     public String getCountry();
  6. }

实现接口

 
 
 
  1. package com.loulijun.chapter6;
  2.  
  3. public class ForeignerGirl implements IForeigner {
  4.     private String name;
  5.     private int age;
  6.     private String country;
  7.     private String face;
  8.     private String figure;
  9.      
  10.     public ForeignerGirl(String name, int age, String country, String face, String figure)
  11.     {
  12.         this.name = name;
  13.         this.age = age;
  14.         this.country = country;
  15.         this.face =face;
  16.         this.figure = figure;
  17.     }
  18.     @Override
  19.     public String getCountry() {
  20.         // TODO Auto-generated method stub
  21.         return country;
  22.     }
  23.  
  24.     @Override
  25.     public int getAge() {
  26.         // TODO Auto-generated method stub
  27.         return age;
  28.     }
  29.  
  30.     @Override
  31.     public String getFace() {
  32.         // TODO Auto-generated method stub
  33.         return face;
  34.     }
  35.  
  36.     @Override
  37.     public String getFigure() {
  38.         // TODO Auto-generated method stub
  39.         return figure;
  40.     }
  41.  
  42.     @Override
  43.     public String getName() {
  44.         // TODO Auto-generated method stub
  45.         return name;
  46.     }
  47.  
  48. }

然后在场景类中只需要修改如下代码即可,其他不变

 
 
 
  1. girls.add(new ForeignerGirl("Avirl",28,"美国","性感型","160cm/45kg"));

不过这些设计原则到不是绝对的,而是根据项目需求,实际需求来定夺使用。

网站题目:设计模式6大原则:开闭原则
URL地址:http://www.shufengxianlan.com/qtweb/news13/539913.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联