文档章节

JAVA设计原则之单一原则

小贱是个程序员
 小贱是个程序员
发布于 2016/11/17 16:32
字数 608
阅读 18
收藏 0

精选30+云产品,助力企业轻松上云!>>>

What

  就一个类(接口、结构体、方法等等)而言,应该仅有一个引起它变化的原因。

Why

  软件设计真正要做的许多内容,就是发现职责并把那些职责互相分离。单一职责原则可以使类的复杂度降低,实现什么职责都有清晰明确的定义;类的可读性提高,复杂度降低(复杂度降低肯定可读性提高);可读性提高了,代码就更容易维护;变更(需求是肯定会变的,程序员都知道)引起的风险(包括测试的难度,以及需要测试的范围)降低。

How

   需求:实现拍照和播放音乐,那先定义两个功能接口(参照《大话设计模式》)

    //具有照相的功能的接口
    interface IPhotograph
    {
        void Photograph();
    }

   //具有播放音乐功能的接口
    interface IPlayMusic
    {
        void PlayMusic();
    }

不遵循单一原则的设计,播放音乐及拍照功能的改变都会引起变化:


  //实现照相、播放音乐的手机类
    public class MobilePhone : IPhotograph, IPlayMusic
    {
        //拍照
        public void Photograph()
        {
            Console.WriteLine("拍照片");
        }

        //播放音乐
        public void PlayMusic()
        {
            Console.WriteLine("播放音乐");
        }
    }
class Program
    {
        static void Main(string[] args)
        {
            IPlayMusic musicPlayer;
            IPhotograph photographer;

            MobilePhone phone = new MobilePhone();
            musicPlayer = phone;
            photographer = phone;
         
            //播放音乐
            musicPlayer.PlayMusic();
            //拍照
            photographer.Photograph();
            Console.ReadLine();
        }
    }

遵循单一原则的设计,引发改变的只有播放音乐功能的变化

//实现播放音乐功能的音乐播放器类
    class MusicPlayer : IPlayMusic
    {
        public void PlayMusic()
        {
            Console.WriteLine("播放音乐");
        }
    }

遵循单一原则的设计,引发改变的只有摄像功能的变化

//实现照相功能的摄像机类
    class Carmera : IPhotograph
    {
        public void Photograph()
        {
            Console.WriteLine("拍照片");
        }
    }
class Program
    {
        static void Main(string[] args)
        {
            IPlayMusic musicPlayer;
            IPhotograph photographer;

            //MobilePhone phone = new MobilePhone();
            //musicPlayer = phone;
            //photographer = phone;

            musicPlayer = new MusicPlayer();
            photographer = new Carmera();

            //播放音乐
            musicPlayer.PlayMusic();
            //拍照
            photographer.Photograph();
            Console.ReadLine();
        }
    }

需求是拍照片和播放音乐,那么我给你一台相机还有一台音乐播放器,哪个功能需要改变你就换哪个,以后你要换的时候也不必去考虑其他功能,只需要关心引起你自己变化的原因。如果拍照

功能发生改变,我们就去改变照相机,播放音乐功能需要改变我们就去改变音乐播放器。我们不需要去考虑播放高品质音乐是不是会对拍摄高清图片的功能造成影响。

小贱是个程序员
粉丝 3
博文 42
码字总数 18418
作品 0
珠海
程序员
私信 提问
加载中
请先登录后再评论。
3张思维导图说清楚:java设计模式的6大设计原则,前3讲!

大家好,我是阿叔,专注分享职场、产品、研发、管理等相关经验。 本文重点介绍java设计模式原则:单一职责原则、里氏替换原则、依赖倒置原则。用思维导图的方式来表现。 23种java设计模式遵循...

osc_71qxolcv
05/06
6
0
3张思维导图说清楚:java设计模式的6大设计原则,前3讲!

大家好,我是阿叔,专注分享职场、产品、研发、管理等相关经验。 本文重点介绍java设计模式原则:单一职责原则、里氏替换原则、依赖倒置原则。用思维导图的方式来表现。 23种java设计模式遵循...

qq5e533aa639369
05/05
0
0
Java程序员应该了解的10个面向对象设计原则

面向对象设计原则是OOPS(Object-Oriented Programming System,面向对象的程序设计系统)编程的核心,但大多数Java程序员追逐像Singleton、Decorator、Observer这样的设计模式,而不重视面向...

Kerry_Han
2013/08/30
23
0
Java程序员应了解的10个面向对象设计原则

面向对象设计原则是 OOPS(Object-Oriented Programming System,面向对象的程序设计系统)编程的核心,但大多数 Java 程序员追逐像 Singleton、Decorator、Observer 这样的设计模式,而不重...

effort_fan
2012/04/09
75
0
Java开发人员需知的十大面向对象设计原则

面向对象设计原则是OOPS(Object-Oriented Programming System,面向对象的程序设计系统)编程的核心,但大多数Java程序设计人员不重视面向对象的分析和设计。甚至还有经验丰富的Java程序员没...

飓风2000
2014/06/21
126
0

没有更多内容

加载失败,请刷新页面

加载更多

智慧旅游海内外现况详情及发展对策

所谓的智慧旅游,便是“智慧地球”和“智慧城市”二者在旅游层面上所展开的实际应用,是伴随着科技进步的发展,信息化管理的提升,从而造成的旅游信息化管理升级。智慧旅游是“智慧地球”的物...

osc_04b0bwu2
11分钟前
0
0
Fiddler 使用fiddler无法抓取苹果手机https请求问题解决方案

使用fiddler无法抓取苹果手机https请求问题解决方案 by:授客 QQ:1033553122 测试环境 Win10 Fiddle4 IPhone6s 问题描述 使用fiddler抓取IPhone6s时,发现无法捕获数据包问题,如下: 解决方...

osc_52r4y6wv
13分钟前
0
0
【Study】 TCP/IP协议 -- 计算机网络之传输层篇(03)

1.传输层 传输层概述: 传输层是管理端到端的通信连接。 传输层之间的通信其实是进程与进程之间的通信,使用端口来标记不同的网络进程。 2.传输层协议 传输层主要有两种协议:TCP和UDP协议。...

osc_3ytpwpyb
14分钟前
0
0
【Study】 TCP/IP协议 -- 计算机网络之应用层篇(04)

应用层包含的协议: TCP与UDP协议的使用场景: 1.DNS详解 DNS:Domain Name SyStem(域名系统) DNS服务是把容易理解的域名转换为计算机中能进行TCP/IP协议通讯的IP,再进行网络的通讯:(I...

osc_bwy4ep83
16分钟前
0
0
浪潮边缘服务器支持中国联通首批5G白盒UPF测试

浪潮边缘服务器支持中国联通首批5G白盒UPF测试 近日,中国联通网络技术研究院联合浪潮在内的三家产业合作伙伴,共同启动了白盒UPF功能和N4接口的兼容性验证测试工作。本次测试的成功标志着N...

osc_zitca8hu
17分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部