网站开发商怎么关闭图片显示,建站网站怎么上传代码,网络公关公司是做啥的,百度网址名称是什么总脉络图#xff1a; 一#xff1a;单一职责原则(全称#xff1a;“Single-Responsibility Principle”)又称 单一功能原则 核心#xff1a;解耦和增强内聚性#xff08;高内聚#xff0c;低耦合#xff09; 说明#xff1a; 就一个类而言#xff0c;应该只专注于做一…总脉络图 一单一职责原则(全称“Single-Responsibility Principle”)又称 单一功能原则 核心解耦和增强内聚性高内聚低耦合 说明 就一个类而言应该只专注于做一件事和仅有一个引起它变化的原因。所谓职责我们可以理解他为功能就是设计的这个类功能应该只有一个而不是两个或更多。也可以理解为引用变化的原因当你发现有两个变化会要求我们修改这个类那么你就要考虑撤分这个类了。因为职责是变化的一个轴线当需求变化时该变化会反映类的职责的变化。 使用SRP注意点 1、一个合理的类应该仅有一个引起它变化的原因即单一职责 2、在没有变化征兆的情况下应用SRP或其他原则是不明智的 3、在需求实际发生变化时就应该应用SRP等原则来重构代码 4、使用测试驱动开发会迫使我们在设计出现臭味之前分离不合理代码 5、如果测试不能迫使职责分离僵化性和脆弱性的臭味会变得很强烈那就应该用Facade或Proxy模式对代码重构SRP优点消除耦合减小因需求变化引起代码僵化。 二、依赖倒转原则(全称“Dependence Inversion Principle”)又称 依赖倒置原则或依赖反转原则 核心要依赖于抽象不要依赖于具体的实现 优点使用传统过程化程序设计所创建的依赖关系策略依赖于细节这是糟糕的因为策略受到细节改变的影响。依赖倒置原则使细节和策略都依赖于抽象抽象的稳定性决定了系统的稳定性。 怎样做到依赖倒置 以抽象方式耦合是依赖倒转原则的关键。抽象耦合关系总要涉及具体类从抽象类继承并且需要保证在任何引用到基类的地方都可以改换成其子类因此里氏代换原则是依赖倒转原则的基础。 在抽象层次上的耦合虽然有灵活性但也带来了额外的复杂性如果一个具体类发生变化的可能性非常小那么抽象耦合能发挥的好处便十分有限这时可以用具体耦合反而会更好。 层次化所有结构良好的面向对象构架都具有清晰的层次定义每个层次通过一个定义良好的、受控的接口向外提供一组内聚的服务。 依赖于抽象 建议不依赖于具体类即程序中所有的依赖关系都应该终止于抽象类或者接口。 尽量做到 1、任何变量都不应该持有一个指向具体类的指针或者引用。 2、任何类都不应该从具体类派生。 3、任何方法都不应该覆写它的任何基类中的已经实现的方法。 三接口隔离原则(全称“Interface Segregation Principle”) 核心思想 不应该强迫客户程序依赖他们不需要使用的方法。 接口分离原则的意思就是一个接口不需要提供太多的行为一个接口应该只提供一种对外的功能不应该把所有的操作都封装到一个接口当中. 分离接口的两种实现方法 1.使用委托分离接口。Separation through Delegation 2.使用多重继承分离接口。Separation through Multiple Inheritance 四迪米特原则(全称“Law of Demeter”) 又称 最少知识原则 说明 对象与对象之间应该使用尽可能少的方法来关联避免千丝万缕的关系。 如何实现迪米特法则 迪米特法则的主要用意是控制信息的过载在将其运用到系统设计中应注意以下几点 1) 在类的划分上应当创建有弱耦合的类。类之间的耦合越弱就越有利于复用。 2) 在类的结构设计上每一个类都应当尽量降低成员的访问权限。一个类不应当public自己的属性而应当提供取值和赋值的方法让外界间接访问自己的属性。 3) 在类的设计上只要有可能一个类应当设计成不变类。 4) 在对其它对象的引用上一个类对其它对象的引用应该降到最低。 五开闭原则(全称“Open-Closed Principle”) 核心思想对扩展开放对修改关闭。 优点 按照OCP原则设计出来的系统降低了程序各部分之间的耦合性其适应性、灵活性、稳定性都比较好。当已有软件系统需要增加新的功能时不需要对作为系统基础的抽象层进行修改只需要在原有基础上附加新的模块就能实现所需要添加的功能。增加的新模块对原有的模块完全没有影响或影响很小这样就无须为原有模块进行重新测试。 如何实现“开-闭”原则 在面向对象设计中不允许更改的是系统的抽象层而允许扩展的是系统的实现层。换言之定义一个一劳永逸的抽象设计层允许尽可能多的行为在实现层被实现。 解决问题关键在于抽象化抽象化是面向对象设计的第一个核心本质。 对一个事物抽象化实质上是在概括归纳总结它的本质。抽象让我们抓住最最重要的东西从更高一层去思考。这降低了思考的复杂度我们不用同时考虑那么多的东西。换言之我们封装了事物的本质看不到任何细节。 在面向对象编程中通过抽象类及接口规定了具体类的特征作为抽象层相对稳定不需更改从而满足“对修改关闭”而从抽象类导出的具体类可以改变系统的行为从而满足“对扩展开放”。 对实体进行扩展时不必改动软件的源代码或者二进制代码。关键在于抽象。 六合成复用原则(全称:Composite Reuse Principle,CRP) 核心思想 尽量使用对象组合而不是继承来达到复用的目的。该原则就是在一个新的对象里面使用一些已有的对象 使之成为新对象的一部分新的对象通过向这些对象的委派达到复用已有功能的目的。 复用的种类 1.继承 2.合成聚合 注在复用时应优先考虑使用合成聚合而不是继承 只有当以下的条件全部被满足时才应当使用继承关系。 1. 子类是超类的一个特殊种类而不是超类的一个角色也就是区分“Has-A”和“Is-A”.只有“Is-A”关系才符合继承关系“Has-A”关系应当使用聚合来描述。 2 .永远不会出现需要将子类换成另外一个类的子类的情况。如果不能肯定将来是否会变成另外一个子类的话就不要使用继承。 3 .子类具有扩展超类的责任而不是具有置换掉或注销掉超类的责任。如果一个子类需要大量的置换掉超类的行为那么这个类就不应该是这个超类的子类。 错误的使用继承而不是合成/聚合的一个常见原因是错误地把“Has-A”当成了“Is-A”.”Is-A”代表一个类是另外一个类的一种而“Has-A”代表一个类是另外一个类的一个角色而不是另外一个类的特殊种类。 七里氏替换原则(全称“Liskov Substitution Principle”) 核心 1.在任何父类出现的地方都可以用他的子类来替代子类应当可以替换父类并出现在父类能够出现的任何地方 子类必须完全实现父类的方法。在类中调用其他类是务必要使用父类或接 口如果不能使用父类或接口则说明类的设计已经违背了LSP原则。 2.子类可以有自己的个性。子类当然可以有自己的行为和外观了也就是方法和属性 3.覆盖或实现父类的方法时输入参数可以被放大。即子类可以重载父类的方法但输入参数应比父类方法中的大这样在子类代替父类的时候调用的仍然是父类的方法。即以子类中方法的前置条件必须与超类中被覆盖的方法的前置条件相同或者更宽松。 4.覆盖或实现父类的方法时输出结果可以被缩小。 转载于:https://www.cnblogs.com/WJ-163/p/5382182.html