美文网首页iOS高效开发者
设计模式六大原则

设计模式六大原则

作者: Tinyspot | 来源:发表于2023-02-11 22:43 被阅读0次

    面向对象

    类比活字印刷术,可维护、可扩展、可复用和灵活性好

    1. 单一职责原则

    • 单一职责原则(SRP),就一个类而言,应该仅有一个引起它变化的原因
    • 生活中的示例:电子阅读器与手机,做好职责分离

    示例:针对不同的用户类型提供差异化服务

    public class VideoService {
        public void watch(String userType) {
            if ("VIP".equals(userType)) {
                System.out.println("VIP会员,视频清晰度1080P");
            } else if ("Common".equals(userType)) {
                System.out.println("普通会员,视频清晰度720P");
            } else if ("Guest".equals(userType)) {
                System.out.println("访客,视频清晰度480P");
            }
        }
    }
    
    @Test
    public void test() {
        VideoService videoService = new VideoService();
        videoService.watch("VIP");
        videoService.watch("Common");
    }
    

    使用单一职责原则改善代码,把展示职责和管理职责分离开,都实现同一个抽象依赖,设计一个顶层接口

    public interface IVideoService {
        void definition();
        void advertisement();
    }
    
    public class VipVideoServiceImpl implements IVideoService {
        @Override
        public void definition() {
            System.out.println("视频清晰度1080P");
        }
        @Override
        public void advertisement() {
            System.out.println("VIP会员无广告");
        }
    }
    public class GuestVideoServiceImpl implements IVideoService {
        @Override
        public void definition() {
            System.out.println("视频清晰度480P");
        }
    
        @Override
        public void advertisement() {
            System.out.println("访客观看 60s 广告");
        }
    }
    
    @Test
    public void test() {
        IVideoService videoService = new VipVideoServiceImpl();
        videoService.definition();
        videoService.advertisement();
    }
    

    2. 开闭原则

    • 开闭原则 (The Open-Closeed Principle,OCP)
    • 对扩展开放,对修改关闭
    • 开放-封闭原则,是说软件实体(类、模块、函数等)应该可以扩展,但是不可修改(例如:继承父类扩展需要的方法)

    实现开闭原则的核心思想就是面向抽象编程

    3. 依赖倒置原则

    1. 高层模块不应该依赖低层模块,二者都应该依赖抽象
    2. 抽象不应该依赖细节,细节应该依赖抽象

    通俗的说,就是要针对接口编程,不要对实现编程

    示例:
    比如单一职责原则,修电脑时内存坏了,不应该成为更换CPU的理由,它们各自的职责是明确的。
    再比如开放-封闭原则,内存不够只要插槽足够就可以添加,硬盘不够可以用移动硬盘等,PC的接口是有限的,所以扩展有限,软件系统设计得好,却可以无限地扩展
    比如依赖倒置原则,无论主板、CPU、内存、硬盘都是在针对接口设计的,如果针对实现来设计,内存就要对应到具体的某个品牌的主板,那就会出现换内存需要把主板也换了的尴尬

    4. 里氏代换原则

    子类型必须能够替换掉它们的父类型

    里氏替换原则是实现开闭原则的重要方式之一

    5. 接口隔离原则

    • 接口隔离原则(Interface Segregation Principle,ISP)
    • 接口隔离原则指用多个专门的接口,而不使用单一的总接口,客户端不应该依赖它不需要的接口
    • 设计接口时的注意事项:
      • (1) 一个类对另一个类的依赖应该建立在最小接口上
      • (2) 建立单一接口,不要建立庞大臃肿的接口
      • (3) 尽量细化接口,接口中的方法尽量少

    6. 迪米特法则

    • 迪米特法则(Law of Demeter,LoD)又叫作最少知道原则(Least Knowledge Principle,LKP),指一个对象应该对其他对象保持最少的了解,尽量降低类与类之间的耦合
    • 迪米特法则主要强调只和朋友交流,不和陌生人说话
    • 迪米特法则有一句经典语录:只和朋友通信,不和陌生人说话

    示例:
    校长想知道一个班级的总分和平均分
    不该让校长直接管理学生,校长应该管理老师,由老师提供相应的学生信息查询服务,校长类只需要调用使用即可,而不需要了解每一位学生的分数

    相关文章

      网友评论

        本文标题:设计模式六大原则

        本文链接:https://www.haomeiwen.com/subject/gfvrkdtx.html