设计模式初步

来源:互联网 发布:雍熙北伐 知乎 编辑:程序博客网 时间:2024/06/05 18:20

设计模式 | 菜鸟教程
参考书:Design Patterns - Elements of Reusable Object-Oriented Software(中文译名:设计模式 - 可复用的面向对象软件元素)
23种设计模式。这些模式可以分为三大类:创建型模式(Creational Patterns)、结构型模式(Structural Patterns)、行为型模式(Behavioral Patterns)。

序号 模式&描述 包括 1 创建型模式
这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用新的运算符直接实例化对象。这使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活。 -工厂模式(Factory Pattern)
-抽象工厂模式(Abstract Factory Pattern)
-单例模式(Singleton Pattern)
-建造者模式(Builder Pattern)
-原型模式(Prototype Pattern) 2 结构型模式
这些设计模式关注类和对象的组合。继承的概念被用来组合接口和定义组合对象获得新功能的方式。 -适配器模式(Adapter Pattern)
-桥接模式(Bridge Pattern)
-过滤器模式(Filter、Criteria Pattern)
-组合模式(Composite Pattern)
-装饰器模式(Decorator Pattern)
-外观模式(Facade Pattern)
-享元模式(Flyweight Pattern)
-代理模式(Proxy Pattern) 3 行为型模式
这些设计模式特别关注对象之间的通信。 -责任链模式(Chain of Responsibility Pattern)
-命令模式(Command Pattern)
-解释器模式(Interpreter Pattern)
-迭代器模式(Iterator Pattern)
-中介者模式(Mediator Pattern)
-备忘录模式(Memento Pattern)
-观察者模式(Observer Pattern)
-状态模式(State Pattern)
-空对象模式(Null Object Pattern)
-策略模式(Strategy Pattern)
-模板模式(Template Pattern)
-访问者模式(Visitor Pattern) 4 J2EE 模式
这些设计模式特别关注表示层。这些模式是由 Sun Java Center 鉴定的。 -MVC 模式(MVC Pattern)
-业务代表模式(Business Delegate Pattern)
-组合实体模式(Composite Entity Pattern)
-数据访问对象模式(Data Access Object Pattern)
-前端控制器模式(Front Controller Pattern)
-拦截过滤器模式(Intercepting Filter Pattern)
-服务定位器模式(Service Locator Pattern)
-传输对象模式(Transfer Object Pattern)

设计模式之间的关系
设计模式之间的关系

设计模式的六大原则

1、开闭原则(Open Close Principle)

开闭原则的意思是:对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。简言之,是为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类,后面的具体设计中我们会提到这点。

2、里氏代换原则(Liskov Substitution Principle)

里氏代换原则是面向对象设计的基本原则之一。 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。LSP 是继承复用的基石,只有当派生类可以替换掉基类,且软件单位的功能不受到影响时,基类才能真正被复用,而派生类也能够在基类的基础上增加新的行为。里氏代换原则是对开闭原则的补充。实现开闭原则的关键步骤就是抽象化,而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。

3、依赖倒转原则(Dependence Inversion Principle)

这个原则是开闭原则的基础,具体内容:针对接口编程,依赖于抽象而不依赖于具体。

4、接口隔离原则(Interface Segregation Principle)

这个原则的意思是:使用多个隔离的接口,比使用单个接口要好。它还有另外一个意思是:降低类之间的耦合度。由此可见,其实设计模式就是从大型软件架构出发、便于升级和维护的软件设计思想,它强调降低依赖,降低耦合。

5、迪米特法则,又称最少知道原则(Demeter Principle)

最少知道原则是指:一个实体应当尽量少地与其他实体之间发生相互作用,使得系统功能模块相对独立。

6、合成复用原则(Composite Reuse Principle)

合成复用原则是指:尽量使用合成/聚合的方式,而不是使用继承。

单例模式

提供创建对象的最佳方式。涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。该类提供一种访问其唯一的对象的方式,可以直接访问,不需要创建对象。
注意:1.单例类只能有一个实例。2.单例类必须自己创建自己的唯一实例。3.单例类必须给所有其他对象提供这一实例。

*eg
在模拟学校运营模式的程序中,校长一实例为唯一实例,全局使用的类而且会参与全校事务处理,即频繁使用与销毁该类对象。由于此对象太特殊又为唯一值且频繁参与程序运行过程。所以为该校长类创建实例。*

工厂模式

简单工厂模式

定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。创建对象过程在非工厂类中执行,耦合分离的思想。

*eg
汽车制造厂,再制造汽车前所有汽车都有一个统一标准,然后根据型号对不同汽车进行设计组装,最后汽车分为很多种,制造过程由工厂承办,不同型号的车由不同厂商指定,工厂只是接到参数进行组装。*

静态工厂模式

一个类代表另一个类的功能,属于结构型模式。创建具有现有对象的对象,以便向外界提供功能接口。
为其他对象提供一种代理以控制这个对象的访问。代理对象可以在客户和目标对象之间起到中介作用。
每个代理只能为一个接口服务,代理对象的一个接口只服务于一种类型的对象,如果要代理的方法很多,势必要为每一种方法都进行代理,静态代理在程序规模稍大时就无法胜任了。另外如果接口增加一个方法,除了所有实现类需要实现这个方法外,所有代理类也需要实现此方法。增加了代码维护的复杂度。

*eg
火车站销售问题,卖票是一种功能方法(抽象主题角色),该方法由火车站(真实主题角色)实现,但对于这一流程的实现,不能买一张票新建创建一个火车站(现实中是不可能实现的),创建代售点(代理主题角色)也可以实现售票功能。*

抽象工厂模式

抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。

*eg
换皮肤,更改产品的一套属性。*

原创粉丝点击