【设计模式】23种设计模式

设计模式的6种原则

1,单一职责原则:就一个类而言,应该仅有一个引起它变化的原因,如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责变化,可能会削弱或者抑制这个类完成其他职责的能力,这种耦合会导致脆弱的设计,当变化发生时(需求变更),设计会遭受到意想不到的破坏。 单一职责比较容易理解,但是实际设计过程中容易发生职责扩散:因为某种原因,某一职责被分化为颗粒度更细的多个职责。

2,里氏替换原则:子类型必须能够替换掉它们的父类型;一个软件实体如果使用的是一个父类的话,那么一定适用于其子类,而且它察觉不出父类对象和子类对象的区别。也就是说在软件里面,把父类都替换成他的子类,程序的行为没有变化;只有子类可以替换父类,软件单位功能不受到影响时,父类才能被真正的复用,而子类也能够在父类的基础上扩展新的行为,此原则是对开-闭原则补充,实现开闭原则的关键步骤就是抽象化。而基类与子类的继承关系,就是抽象化的具体实现,所以里氏替换原则是对实现抽象化的具体步骤的规范。在进行设计的时候,应尽量从抽象类继承,而不是具体类继承。如果从继承等级树来看,所有的叶子节点应当是具体类,而所有的树枝节点应当是抽象类或者接口

3,依赖倒置原则:a,高层模块不应该依赖低层模块。两个都应该依赖抽象。b,抽象不应该依赖细节,细节应该依赖抽象。面向过程的开发,上层调用下层,上层如果依赖于下层,当下层剧烈变动时上层也要跟着变动,这就会导致模块的复用性降低而且大大提高了开发的成本,依赖倒转很好的解决了这个问题

4,合成/聚合原则尽量使用合成/聚合,尽量不要使用类继承。优先使用对象的合成/聚合将有助于你保持每个类被封装,并被集中在单个任务上。这样类和类继承层次会保持较小规模,并且不太可能增长为不可控制的庞然大物;
    为什么尽量不要使用类继承而使用合成/聚合?

    对象的继承关系在编译时就定义好了,所以无法在运行时改变从父类继承的子类的实现

    子类的实现和它的父类有非常紧密的依赖关系,以至于父类实现中的任何变化必然会导致子类发生变化

    当你复用子类的时候,如果继承下来的实现不适合解决新的问题,则父类必须重写或者被其它更适合的类所替换

    这种依赖关系限制了灵活性,并最终限制了复用性

5,迪米特法则:如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用,如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用;

迪米特根本思想是:类之间的松耦合;类之间的耦合越弱,越有利于复用,一个处于弱耦合的类被修改,不会对有关系的类造成波及。信息的隐藏促进了软件的复用;广义的迪米特法则在类的设计上的体现:优先考虑将一个类设置成不变类。尽量降低一个类的访问权限。谨慎使用Serializable。尽量降低成员的访问权限。

6,开放封闭原则:软件实体(类,模块,函数等等)应该可以扩展,但是不可以修改;

    对扩展开放,意味着有新的需求或变化时,可以对现有代码进行扩展,以适应新的情况。对修改封闭,意味着类一旦设计完成,就可以独立完成其工作,而不要对类进行任何修改。这样的设计,能够面对需求改变却可以保持相对稳定,从而使系统在第一个版本以后不断推出新的版本;面对需求,对程序的改动是通过增加新的代码进行的,而不是更改现有的代码;开放封闭原则,是最为重要的设计原则,Liskov替换原则和合成/聚合复用原则为开放封闭原则的实现提供保证。

23种设计模式被分为三大类

创建型设计模式:工厂模式,抽象工厂模式,单例模式,建造者模式,原型模式

结构型设计模式:组合模式,外观模式,桥接模式,代理模式,适配器模式,装饰模式,享元模式

行为型设计模式:观察者模式,中介模式,备忘录模式,解释器模式,状态模式,模版方法模式,命令模式,责任链模式,访问者模式,迭代器模式,策略模式

创建型模式:是对类的实例化过程进行了抽象,能够将软件中对象的创建和对象的使用分离,为了使软件的结构更加清晰,外界对于这些对象只需要知道他们开放的接口,而不需要知道对象的实现细节(实例化),使整个系统更加符合单一职责原则,创建型模式在创建什么,由谁创建,何时创建等方面为软件开发者提供了很大的灵活性。创建型模式隐藏了对象的创建细节,通过隐藏对象如何被创建和组合在一起来达到是使整个系统独立的目的。

结构型模式:描述如何将类或者对象结合在一起,形成更大的结构,就像搭积木一样,可以通过简单的积木的的组合形成复杂的、功能更强大的结构。结构模型可以分为类结构模式和对象结构模,类结构型模式关心类的组合由多个类可以组合成一个更大得到系统,在类结构模式中,一般只存在继承和实现关系。对象结构型模型关心类与对象的组合,通过关联关系使得在一个类中定义另一个类的实例对象,然后通过该对象调用其方法,根据合成聚合原则,在系统中尽量使用关联关系来代替继承关系,因此大部分的结构型模式都是对象结构型模式。

行为型模式:

行为型模式(BehavioralPattern)是对在不同的对象之间划分责任和算法的抽象化。

行为型模式不仅仅关注类和对象的结构,而且重点关注它们之间的相互作用。

通过行为型模式,可以更加清晰地划分类与对象的职责,并研究系统在运行时实例对象之间的交互。在系统运行时,对象并不是孤立的,它们可以通过相互通信与协作完成某些复杂功能,一个对象在运行时也将影响到其他对象的运行。

行为型模式分为类行为型模式和对象行为型模式两种:

    类行为型模式:类的行为型模式使用继承关系在几个类之间分配行为,类行为型模式主要通过多态等方式来分配父类与子类的职责。

    对象行为型模式:对象的行为型模式则使用对象的聚合关联关系来分配行为,对象行为型模式主要是通过对象关联等方式来分配两个或多个类的职责。根据“合成复用原则”,系统中要尽量使用关联关系来取代继承关系,因此大部分行为型设计模式都属于对象行为型设计模式。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值