unity 项目开发——浅谈设计模式的六大原则(一)

简介: unity 项目开发——浅谈设计模式的六大原则(一)

前言


       面向对象,六大原则,设计模式,数据结构与算法,这些知识点都是脱离编程语言存在的。也就意味着它们 “比较抽象”,抽象的东西也就意味着从学习、理解到运用所需要花费的时间会比较长。

       今天我们就主要谈谈设计模式的“六大原则”。

首先,六大原则是谁?


       它们分别是单一职责、开闭原则原则、依赖倒置原则、里氏替换原则、接口隔离原则、迪米特原则。

其次,为什么需要学习这六大原则?


       六大原则是我们提高面向对象编程代码质量的必备原则,另外还是我们理解设计模式的必备前提。

       弄清楚了学习对象和学习目的,下面就可以进入正题了,这六大设计原则本质上是什么,又分别是用来做什么的,实际中的运用又有哪些?

正文


一、单一职责原则


       定义:就一个类而言,应该仅有一个引起它变化的原因。简单点理解就是,就是一个类只负责一项职责(功能)。

       从生活中的具体示例理解单一职责:

冰淇淋:单一职责是被吃

矿泉水:单一职责是被饮用

ofo:单一职责是共享单车

生活中的事物的单一性是为了集中(精力 / 财力 / 物力),然后把这一点做到最好,只有这样才能更有竞争力。


       而编程中的单一性也是为了集中,一个类它的功能,作用,用途集中到一点。这样可以避免代码冗余,方便管理,方便团队沟通,能提高项目的开发效率。

示例:

public interface UserService {
    public void login(String username, String password);
    public void register(String email, String username, String password);
    public void logError(String msg);
    public void sendEmail(String email);
}

   这段代码很显然存在很大的问题,UserService 既要负责用户的注册和登录,还要负责日志的记录和邮件的发送,并且后者的行为明显区别于前者。

       假设我要修改发送邮件的逻辑就得修改这个类,这时候 qa 还得回归登录注册逻辑,这样明显不合理。

因此我们需要进行拆分,根据具体的职能可将其具体拆分如下:


UserService:只负责登录注册

1.


public interface UserService {
    public void login(String username, String password);
    public void register(String email, String username, String password);
}

LogService :只负责日志

public interface LogService {
    public void logError(String msg);
}

EmailService: 只负责发送邮件

public interface EmailService {
    public void sendEmail(String email);
}

Unity 单一职责原则


       结合 Unity 项目开发过程中,有两个注意点:

①类功能的单一性;

②方法功能的单一性;

  一个类只负责一件具体的事情,一个方法只完成一个特定的功能。当你发现一方法完成了两件事情的时候,就需要适当的重构成两个方法,类也是一样的。单一职责在 unity 项目开发中的应用:

①功能类库的单一性:例如 UGUI 中的 JSON 就是单一用于解析 JSON 的。

②引擎组件类功能单一性:在 Unity 引擎内有一组灯光组件,是用于实现灯光照射渲染功能的。它根不同的功能分割成了 4 个组件:方向光,点光源,聚光灯,区域光。

二、开闭原则


       定义:全称开放封闭原则,软件实体(类,方法,模块)应该可以扩展,但是不可以修改

       在生活中的具体应用:

笔记本电脑

封闭:整个笔记本是封闭的,且笔记本背部标明了 “非专业人士,请勿试图拆卸或者维修” 以及 “撕毁保修无效” 的封条。

开放:指的是笔记本提供了若干个 USB 的插口,可供我们扩展。

笔记本上的封闭,是为了保证设备本身的安全。而笔记本上的开放,是为用户预留可以扩展的接口。


       而编程中的封闭,也是为了保证原有的安全,当出现了新的需求,是以扩展的方式,而不是对原有的逻辑进行修改。面对需求,对程序的改动应该是以增加新代码的方式解决,而不是更改旧的代码 (这一点在游戏开发方向尤为重要)。

Unity 开闭原则


       Unity 引擎本身就是开闭原则很好的一个案例。

       Unity 官方把这款引擎打包发布出来以后,这个引擎本身程序员是不可以修改的,因为你没有源码 ---> 对修改关闭。但是 Unity 引擎提供了 “编辑器扩展功能”,提供了一组完整的 API,我们可以通过这组 API 对 Unity 引擎扩展出 N 个插件,以满足我们的特定需求。

目录
相关文章
|
2月前
|
设计模式
设计模式七大原则
这篇文章介绍了设计模式中的七大原则,特别强调了单一职责原则,即一个类应该只有一个引起其行为变化的原因,以确保类功能的高内聚和低耦合。
|
2月前
|
设计模式 存储 前端开发
React开发设计模式及原则概念问题之自定义Hooks的作用是什么,自定义Hooks设计时要遵循什么原则呢
React开发设计模式及原则概念问题之自定义Hooks的作用是什么,自定义Hooks设计时要遵循什么原则呢
|
20天前
|
设计模式 Java 关系型数据库
设计模式——设计模式简介和七大原则
设计模式的目的和核心原则、单一职责原则、接口隔离原则、依赖倒转原则、里氏替换原则、开闭原则、迪米特法则、合成复用原则
设计模式——设计模式简介和七大原则
|
2月前
|
设计模式 算法 开发者
设计模式问题之最小知识原则(迪米特法则)对代码设计有何影响,如何解决
设计模式问题之最小知识原则(迪米特法则)对代码设计有何影响,如何解决
|
2月前
|
设计模式 前端开发 JavaScript
React开发设计模式及原则概念问题之什么是HOC(Higher-order component),HOC遵循的设计原则都有哪些
React开发设计模式及原则概念问题之什么是HOC(Higher-order component),HOC遵循的设计原则都有哪些
|
2月前
|
设计模式 前端开发 JavaScript
React开发设计模式及原则概念问题之什么是设计模式,单一职责原则如何理解
React开发设计模式及原则概念问题之什么是设计模式,单一职责原则如何理解
|
4月前
|
设计模式 uml
设计模式学习心得之前置知识 UML图看法与六大原则(下)
设计模式学习心得之前置知识 UML图看法与六大原则(下)
29 2
|
4月前
|
设计模式 Java 数据库
深入理解设计模式六大原则
深入理解设计模式六大原则
|
5天前
|
设计模式 数据库连接 PHP
PHP中的设计模式:提升代码的可维护性与扩展性在软件开发过程中,设计模式是开发者们经常用到的工具之一。它们提供了经过验证的解决方案,可以帮助我们解决常见的软件设计问题。本文将介绍PHP中常用的设计模式,以及如何利用这些模式来提高代码的可维护性和扩展性。我们将从基础的设计模式入手,逐步深入到更复杂的应用场景。通过实际案例分析,读者可以更好地理解如何在PHP开发中应用这些设计模式,从而写出更加高效、灵活和易于维护的代码。
本文探讨了PHP中常用的设计模式及其在实际项目中的应用。内容涵盖设计模式的基本概念、分类和具体使用场景,重点介绍了单例模式、工厂模式和观察者模式等常见模式。通过具体的代码示例,展示了如何在PHP项目中有效利用设计模式来提升代码的可维护性和扩展性。文章还讨论了设计模式的选择原则和注意事项,帮助开发者在不同情境下做出最佳决策。
|
20天前
|
设计模式 算法 安全
设计模式——模板模式
模板方法模式、钩子方法、Spring源码AbstractApplicationContext类用到的模板方法
设计模式——模板模式