设计模式

来源:互联网 发布:剑亭网络武侠小说 编辑:程序博客网 时间:2024/06/16 01:59

针对接口编程

接口是对抽象的抽象,是一种标志,一种约定。
将设计和实现分离,在使时引用接口就好。
提高程序的可维护性、可伸缩性和可复用性。
如果需要进行更新,只需要实现接口,而使客户端不变,依然可以正常使用。

在设计接口中,是一种承诺。时间越长,如果发生更改,成本也就越高昂。不要轻易说我爱你,这是一生的承诺。

单一职责原则

类本就是对事物的抽象,应该只完成和自己有关的功能,各个类各司其职,就可以很好的降低类的内聚行,增强类的耦合性。如果类和类的关联性太强,导致牵一发而动全身,出错的概率,也会越来越高。系统维护工作,测试工作将难以进行

树立一个远大目标,然后拼尽一切力量去实现这个目标

开放封闭原则

一个软件实体应当对拓展开放,对修改封闭。
当软件需求发生变化时,可以对现有代码进行拓展,用以适应新的需求。对修改封闭,意味着类一旦设计完成,就可以独立完成其工作,而不要对类进行修改。
其实这原则,建立在面向接口编程的基础上,要增对接口编程,接口才是设计,接口是承诺,是相对不变的,当需求发生变化是,我们并不需要更改设计,而是实现接口,进行拓展。这样很好的做到对拓展开放,对修改关闭的原则。

里氏代换原则

Liskov Substitution Principle(LSP)

这个原则就是一句话,当一个软件实体,如果使用基类,那么使用子类也是同样可以的。就像仙人除妖,只要是妖怪他就要除掉。但是反过来就不可以了,除的了蛇妖的就一定是仙人,可能是妖怪黑吃黑呢。而仙人的之类,道士和尚都是可以除妖怪的。
开放封闭原则的关键是抽象,继承是具体的实现。LSP是对继承的约束,确保基类和子类的正确性,进而实现开放封闭原则。

迪米特法则

Law of Demeter(LoD) 最少知识法则

两个类做好自己分内的事情就好,如果需要通信,依赖第三方进行转发调用,来实现通信。
类和类之间的耦合性很低,有利于实现可复用的目标。
同时导致系统通信效率低,存在大量中介类,多模块直接不容易协调,增加系统复杂度。
使用依赖倒转,也就是面向接口编程,使调用方和被调用方,中间存在一层抽象层,在遵循接口要求的前提下,可以自由变化,有效减少中介类。LoD过分遵循,系统将十分的庞大和复杂。

合成复用原则

Composite Aggregate Reuse Principle(CARP)

Composite Reuse Principle(CRP)

尽量使用合成和聚合,尽量不要使用继承。
继承破坏封装,同时父类发生变化,子类也要发生响应的变化。
使用已经拥有的类来构建新的类的对象,会导致系统中有很多类和对象需要管理和维护,从而增加系统的复杂性。
聚合 Aggregation 是关联关系的一种,标志整体对部分拥有的关系。
合成 Composition 是一种比聚合更加强的关联关系,部分构建成一个整体。

简单工厂模式

静态工厂模式

通过工厂类创建其他类的实例,被创建的实例通常拥有相同的父类(接口,抽象类)。
工厂根据外界给定的条件,创建具体类的对象,用户无需了解对象是如何创建和组织的,有利于整个软件体系的优化。
一旦工厂类出现问题,有所的客户端都会受到牵连。同时违背了单一职责,导致系统市区灵活性和可维护性。同时违背了开放封闭原则,增加一个产品,就需要更改一次工厂,同时工程是静态的,不能形成继承树。

工厂模式

多态工厂模式

核心工程不在负责创建产品的生产,成为一个抽象的工程角色,负责具体生产的工厂子类必须实现接口,这样新增加一种产品,则可以不修改具体的工厂实现类。
抽象工厂–指定标准
具体工厂–生产产品
抽象产品
具体产品
相对于简单工厂模式,符合开放封闭原则。
但是客户端需要决定实例化哪一个具体的工程,把简单工程的内部判断,提交给了客户端,导致工作量的增加。

抽象工厂模式

Abstact Factory Pattern

最抽象,最具有一般性的工程模式。向客户端一桶一个接口,客户端不需要指定具体产品类型的情况下,创建多个产品族的产品。

单例模式

保证一个类,只有一个实例存在,同时提供能对该实例加以访问的全局访问方法。
1 某个类只有一个实例
2 必须自行创建这个实例
3 自行对整个系统,提供实例
只需要调用一个方法,有利于节约资源。
很难实现序列化,也就很能被持久化,很难通过网络传输。无法在继承结构中使用。如果在分布式集群环境中存在多个JVM,具体确认哪个单例运行是困难的。

原型模式

Prototype Pattern

0 0
原创粉丝点击