• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >编程问答 > 类抽象的设计问题

类抽象的设计问题

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-07

佚名通过本文主要向大家介绍了设计类毕业答辩问题,设计类面试问题,设计类问题,设计类论文答辩问题,问题类信息等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题:类抽象的设计问题
描述:

    public interface A{
       void a();
    }
    
    public abstract class B{
        protected abstract boolean lockA();
        
        public void a(){
            if(lockA()){
                do();
            }
        }
        
        protected abstract void do();
    }
    
    public class C extends B implements A{
        public boolean lockA(){
            return true;   
        }
        
        public void do(){
            //TODO one
        }
    }

这个时候需要一个新的类D,类D的lockA的规则是和C是一样的。所以在这里就出现以下几种写法:

  • 写法一

       public class D extends B implements A{
           private C c = new C();
           
            public boolean lockA(){
                 c.lockA();
           }
           
           public void do(){
               //TODO two
           }
       }
  • 写法二

       public class D extends C implements A{
            public boolean lockA(){
                 super.lockA();
           }
           
           public void do(){
               //TODO two
           }
       }
       
  • 写法三

       public interface Lock{
           boolean lockA();
       }
       
       public interface DO{
           void do();
       }
       
       public class C extends B implements A{
           private Lock lock;
           
           private DO do;
       
           public boolean lockA(){
               return lock.lockA();   
           }
           
           public void do(){
               do.do();
           }
       }
       

    写法一通过把类C组合进类D,然后简介调用C的方法lockA()

写法二通过继承的方法来复用lockA()
写法三,通过吧Lock和Do做一层抽象,然后通过组合的方式来调用,这个方法的灵活度和可扩展性很高。也是我比较喜欢的做法。

如上述方法一和方法二,在我看来其实也未必不可。我唯一觉得方法三比方法一,二的优势是在类的层次上设计上更加合理,因为C,D同为A的子集,如果还存在依赖关系就感觉很不合理。

最近自己陷入了一个怪圈,我一直在思考到底什么样子的代码才算是好的代码。很多时候我都凭着自己的感觉去选择编码的方式,比如上述问题,我会凭我的感觉去选择方法三。还有很多很多情况,我会凭自己的感觉去判断一段代码的好坏,但是我有的时候会自己问自己,或者让我举一个反例来说明现在的方法不好,我会想很长时间才能想出来,甚至是想不出来,因为很多时候我发现自己是根据感觉去判断一段代码是否优雅的。。。。

希望有经验的老前辈可以指教一二,谢谢。


解决方案1:

感觉不出来是因为没疼过

这种时候随便挑一种写完再说

等累积了一定的代码量,来来回回修改迭代了若干版本之后,下次面对类似的情况就有感觉了

“上次我那样那样做,后来代码变成了一坨没法维护的垃圾,这次得从最开始就避免”

解决方案2:

如果你是想考量你所列举的几种方法的优劣,我想最好还是套到实际的情况中去决定。所谓设计模式,只是对常用编程思路的一个抽象而已,设计模式之间没有好坏之分,只有谁更适合实际的情况。所以单纯比较几种设计模式,并不能分析得非常到位。

另外,要实现的上述的这个思路,我想你可以尝试一下php的 trait ,我想它比上述的方法需要书写的代码更少,兼容的场景更多。


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 类抽象的设计问题

相关文章

  • 2017-06-07 Flask-admin中如何把两个关联的Model在同一个View中显示在同一个list里?
  • 2017-06-07 (python)spark读入文件,报错javaioIOException:Noinputpathsspecifiedinjob
  • 2017-06-07 Anaconda如何在Python3和Python2之间切换?
  • 2017-06-07 (flask)requestform获取不到formtexarea的值
  • 2017-06-07 opencv中复制视频不成功,请大牛请教
  • 2017-06-07 macos10122安装cocoapods失败
  • 2017-06-07 正则表达式校验数据库字段名格式的正则表达式
  • 2017-06-07 php合并数组~按照某一列的值
  • 2017-06-07 flask中使用Markdown处理富文本怎么的时候怎么处理图片
  • 2017-06-07 如图所示,Python-requests库在__init__py中使用如此导入的好处是?

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • (python)dateutilparser处理不完整时间字符串
    • MacOSX下重新安装mysql提示“启动器遇到了一个错误”
    • 固定随机数生成
    • 我为网站添加了一个A记录指向我的服务器IP,ping成功。但是浏览器通过域名访问不了,但可以通过IP访问。
    • MySQL数据表损坏(python)mysql数据库表设计问题
    • (python)selenium点击加载更多后但是获取到的html还是原来的
    • 请教AddNew不能执行的原因
    • FileUploaded返回的info中hash有值key没有值是什么原因
    • python爬虫(python)微博爬虫抓取出现的连接问题?
    • (VFP)新人小白问题:如何将变量的值插入表中

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有