zoukankan      html  css  js  c++  java
  • 设计模式原则——单一原则

    设计模式一共有六大原则:

    单一原则、开放封闭原则、接口分离原则、里氏替换原则、最少知识原则、依赖倒置原则。

    这篇博客是自己对单一设计原则的一些拙见,有何不对欢迎大家指出。

    单一原则:

    就一个类而言,应该仅有一个引起它变化的原因。

    如何理解这句话?

    一个类中只负责一个职责。当我们觉得这个“职责”不符合我们的要求的时候,我们可以随时只替换这个职责。因为类中只有这一个职责,所以并不会影响到其他的职责。

    假如,一个类中有两个职责A和B,当A不满足需求需要被修改的时候,B同样的也会受到影响。(这种影响是不可预期)

    Demo:(手机为例)

    手机含有的拍照功能:

    public interface MakePhoto {
        // 拍照功能
        public void photo();
    }

    手机含有的mp3功能:

    public interface ListenMusic {
        // 听音乐
        public void play();
    }

    不遵循单一原则的实现:

    /**
     * 实现方式没有遵循单一原则,拍照或者播放音乐需求的改变都会引起整天的变化。
     * 
     * @author tujietg
     *
     */
    public class Iphone implements ListenMusic, MakePhoto {
    
        @Override
        public void photo() {
            System.out.println("手机含有拍照功能");
        }
    
        @Override
        public void play() {
            System.out.println("手机含有播放功能");
        }
    
    }

    遵循单一规则的实现:

    拍照功能:

    public class PhotoImpl implements MakePhoto {
        @Override
        public void photo() {
            System.out.println("仅仅拍照功能的实现");
        }
    }

    播放功能:

    public class ListenMusicImpl implements ListenMusic {
    
        @Override
        public void play() {
            System.out.println("播放功能的实现");
        }
    
    }

    手机的实现:

    public class iphoneModel {
        public static void main(String[] args) {
            // 播放音乐
            ListenMusic listenMusic = new ListenMusicImpl();
            // 拍摄照片
            MakePhoto makePhoto = new PhotoImpl();
            listenMusic.play();
            makePhoto.photo();
        }
    }

    总结:

    从代码中可以看出,采用了单一原则的代码,当播放音乐或者拍摄照片的需求改变的时,两者之间的变化是互不影响。

  • 相关阅读:
    【应试】数据通信与网络
    【应试】操作系统OS
    【笔记】 卷积
    【HDU 5920】 Ugly Problem
    【笔记】位运算
    【洛谷P1378】油滴扩展
    【洛谷 P1120】 小木棍[数据加强版]
    [codeforces]Round #538 (Div. 2) F. Please, another Queries on Array?
    [BZOJ]2563: 阿狸和桃子的游戏
    [BZOJ]4668: 冷战
  • 原文地址:https://www.cnblogs.com/tujietg/p/10220075.html
Copyright © 2011-2022 走看看