引言
? ? ?什么是设计模式(What)?
? ? ? ?设计模式是前人实际经验的积累和总结,都是着重解决实际的问题。
? ? ? ?学习设计模式的目的(Why)?
? ? ? ?通过学习设计模式来提高写出的代码的可维护性、可复用性、可扩展性和灵活性。也就是说让系统可以达到“高内聚、低耦合”的状态。
? ? ? ?如何学习设计模式(How)?
? ? ? ?设计模式是前人的实践经验总结出来的,六大设计原则,23种设计模式;尽管每种模式都有固定的实现方式。可是设计的原则是活的。所以在学习设计模式的过程中要有所思、有所想、有所悟,有良好的理论基础。这样我们在实际运用中才干得心应手。
?
? ? ? ?以下来说说设计模式的一、三、五:
? ?
设计模式之中的一个
? ?一抽象:
? ? ? ??抽象是从众多的事物中抽取出共同的、本质性的特征,而舍弃其非本质的特征。比如苹果、香蕉、生梨、桃子等,它们共同的特性就是水果。得出水果概念的过程,就是一个抽象的过程。抽象化的目的是为了使复杂度降低。
设计模式是面向对象编程,而面向对象编程的基础就是类的抽象化。
所以要想学好设计模式。就要学好面向抽象编程的思想。
? ??
? 一法则:
? ? 迪米特法则
? ??迪米特法则(Law of Demeter)又叫作最少知识原则(LKP,Least Knowledge Principle),就是说一个对象应当对其它对象有尽可能少的了解。类与类之间的了解的越多,关系越密切,耦合度越大,当一个类发生改变时。还有一个类也可能发生变化。
? ? 核心思想:最少依赖
? ? 详细介绍:设计模式六大原则——迪米特法则(LOD)
设计模式之三
?三大特性
? ? 1、封装
? ??把事物的状态和行为的实现细节封装在类中,形成一个可以反复使用的“零件”。被成千上万对其内部毫不知情的工作人员使用。
? ? 2、继承
? ? “Is-a”的的关系,表示一个类是还有一个类的特殊种类。
? ? 3、多态
? ? 不同的对象可以运行同样的动作,但要通过它们自己的实现代码来运行。
?三大类别
? ? 1、创建型模式
? ? 处理对象的创建过程。
创建型模式将类的实例是如何被创建和放在一起的这些关于详细类的的信息封装起来。创建一个公用的“零件”,也就是接口,来和外部链接。这样降低了类与类之间的紧密程度。内部完整——高内聚,与外部的连接灵活——低耦合。
? ? 例:创建一个抽象的动物类。仅仅知道动物类是有生命的个体。都可以进行新陈代谢和生殖。
? ? 2、结构型模式
? ? 用来处理类或者对象的组合。就是描写叙述类和对象之间如何组织起来形成大的结构,从而实现新的功能。
? ? 例:创建型创建了一个抽象的动物类,那么结构型模式就是对这个类进行修饰加工。加上强健的四肢,如:狮子,加上翅膀:如鹰,加上鳃:如鲤鱼。
?? ?3、行为型模式
?用来对类或者对象如何交互和如何分配职责进行描写叙述。
?例:结构型模式对创建的类进行了修饰加工,而行为型模式则是赋予被修饰后的类一些特性。例:对狮子的四肢进行合理设计,从而让狮子可以在陆地上风驰电掣;对鹰的翅膀进行合理设计,让鹰可以翱翔九天。对鱼的鳃进行合理设计,让鲤鱼可以畅游海底。
? 23中设计模式的详细分类:
??
?
设计模式之五
?五大原则?
? ? ? ?1、开放-闭合原则
??软件实体(类、模块、函数等等)应该可以扩展。可是不可修改。意思就是在一个系统中,添加程序的功能时,不应该修改原有代码。仅仅要添加新的代码就可以;开闭原则是核心原则。一切的一切都环绕开闭原则展开的。
? 详细介绍:设计模式六大原则——开放-闭合原则(OCP)
? ? ? ?2、依赖倒置原则
??细节是多变的。而抽象是相对稳定的。所以我们编程的时候要注重抽象的编程,而非细节编程。假设说开闭原则是目标,依赖倒转原则是到达"开闭"原则的手段。
? 详细介绍:设计模式六大原则——依赖倒置原则(DIP)
? ? ? ? ?3、里氏代换原则
? 子类型必须可以替换掉他们的父类型。限制变化影响的范围。
? 详细介绍:设计模式六大原则——里氏代换原则(LSP)
? ? ? ?4、合成/聚合复用原则
??要尽量使用合成和聚合,尽量不要使用继承。
? 详细介绍:设计模式六大原则——合成/聚合复用原则(CARP)
? ?里氏代换原则和合成/聚合复用原则都是对开放闭合原则使用时的规范。
? ? ? ? 5、单一职责原则
? ?就一个类而言,应该仅有一个引起它变化的原因。通俗的说。一个类仅仅负责一项职责。
? ?详细介绍:设计模式六大原则——单一职责原则(SRP)
? 五大关系
? 在设计模式中涉及的五种关系:依赖、关联(聚合、组合)、实现、继承,用设计模式中一张经典的图来作解释:
总结
学习设计模式的基础就是理解设计原则,我们学的全部的设计模式都离不开设计原则,都是依照一定的设计原则进行的,所以设计原则是一定要掌握的。不管你在实际项目中是否应用了设计模式。设计原则是一定要遵守的编程准则。
??
? ? ??
? ? ? ?
? ? ? ??
? ? ?