设计模式-导论

设计模式 -- 可复用的面向对象软件元素
对接口编程而不是对实现编程
优先使用对象组合而不是继承

设计模式分类:创建型模式(5个)、结构型模式(7个)、行为型模式(11个)
设计模式的基石:封装、继承、多态、顺序、判断、循环

创建型模式:单例(Singleton)模式、原型(Prototype)模式、工厂方法(FactoryMethod)模式、
                      抽象工厂(AbstractFactory)模式、建造者(Builder)模式
结构型模式:代理(Proxy)模式、适配器(Adapter)模式、桥接(Bridge)模式、装饰(Decorator)模式、
        外观(Facede)模式、享元(Flyweight)模式、组合(Composite)模式、过滤器(Filter Pattern)模式
行为模式:模板方法(Template Method)模式、策略(Strategy)模式、命令(Command)模式、
                  职责链(Chain of Responsibility)模式、状态(State)模式、观察者(Observer)模式、
                  中介者(Mediator)模式、迭代器(Iterator)模式、访问者(Visitor)模式、
                  备忘录(Memento)模式、解释器(Interpreter)模式

设计模式的7大原则
1、开闭原则:对扩展开放,对修改关闭
2、里式替换原则:继承父类而不去改变父类
3、以来倒置原则:面向接口编程,而不是面向实现类
4、单一职责原则:每个类只负责自己的事情,而不是变成万能
5、接口隔离原则:每个类建立自己的专用接口,而不是建立万能接口
6、迪米特法则:无需直接交互的两个类,如果需要交互,使用中间者
7、合成复用原则:优先组合其次继承

创建型模式
创建型模式关注点:“怎样创建出对象?”
将对象的创建与使用分离
降低系统的耦合度
使用者无需关注对象的创建细节:
        对象的创建由相关的工厂来完成;(各种工厂模式)
        对象的创建由一个建造者来完成:(建造者模式)
        对象的创建由原来对象克隆完成;(原型模式)
        对象在系统中始终只有一个实例;(单例模式)


单例模式(Singleton)
一个单一的类,负责创建自己的对象,同时确保系统中只有单个对象被创建。
1、某个类只有一个实例(构造器私有)
2、它必须自行创建这个实例(自己编写实例化逻辑)
3、它必须自行向整个系统提供这个实例(对外提供实例化方法)
应用场景:
1、多线程中的线程池
2、数据库的连接池
3、系统环境信息
4、上下文(ServletContext)
5、枚举


原型模式(Prototye)
原型模式(Prototype Pattern)是用于创建重复的对象,又能保证性能
应用场景:
1、资源优化
2、性能和安全要求
3、一个对象多个修改者的场景
4、一个对象需要提供给其他对象访问,而且各个调用者可能都需要修改其值时可以考虑使用原型     模式拷贝多个对象供调用者使用
5、深拷贝(两个完全对象不一样的递归克隆)、浅拷贝(只是属性赋值)


工厂模式(Factory)
工厂模式(Factory Pattern)提供了一种创建对象的最佳方式。我们不必关心对象的创建细节,只需要根据不同情况获取不同对象即可。
1、简单工厂        2、工厂方法多态工厂        3、抽象工厂


建造者模式(Builder)
产品角色(Product)
抽象建造者(Builder)
具体建造者(Concrete Builder)
创建的对象细节复杂,还必须暴露给使用者 


结构型模式
结构型模式关注点“怎样组合对象/类?”所以我们关注下类的组合关系
类结构型模式关心类的组合,由多个类可以组合成一个更大的(继承)
对象结构型模式关心类与对象的组合,通过关联关系在一个类中定义另一个类的实例对象(组合)
根据“合成复用原则”,在系统中尽量使用关联关系来替代继承关系,因此大部分结构型模式都是对象结构型模式
1、适配器模式(Adapter Pattern):两个不兼容接口之间适配的桥梁
2、桥接模式(Bridge Pattern):相同功能抽象化与实现化解耦,抽象与实现可以独立升级。
3、过滤器模式(Filter、Criteria Pattern):使用不同的标准来过滤一组对象
4、组合模式(Composite Pattern):相似对象进行组合,形成树形结构
5、装饰器模式(Decorator Pattern):向一个现有的对象添加新的功能,同时又不改变其结构
6、外观模式(Facade Pattern):向现有的系统添加一个接口,客户端访问此接口来隐藏系统的复杂性。
7、享元模式(Flyweight Pattern):尝试重用现有的同类对象,如果未找到匹配的对象,则创建新对象
8、代理模式(Proxy Pattern):一个类代表另一个类的功能


适配器模式(Adapter Pattern)

将一个接口转换成客户希望的另一个接口,适配器模式使接口不兼容的那些类可以一起工作,适配器模式分为类结构型模式(继承)和对象结构型模式(组合)两种,前者(继承)类之间的耦合度比后者高,且要求程序员了解现有组件库中的相关组件的内部结构,所以应用相对较少些。
别名也可以是Wrapper,包装器

适配器模式(Adapter)包含以下主要角色:
1、目标(Target)接口:可以是抽象类或接口。客户希望直接用的接口
2、适配者(Adaptee)类:隐藏的转换接口
3、适配器(Adapter)类:它是一个转换器,通过继承或引用适配者的对象,把适配者接口转换成目标接口。
使用场景:
·Tomcat如何将Request流转为标准Request;
·Spring AOP中的AdvisorAdapter是什么
·SpringMVC中经典的HandlerAdapter是什么
·SpringBoot中WebMvcConfigurerAdapter为什么存在又取消


桥接模式(Bridge Pattern)
将抽象与实现解耦,使两者都可以独立变化
在现实生活中,某些类具有两个或多个维度的变化,如图形既可按形状分,又可按颜色分。如何设计类似于Photoshop这样的软件,能画不同形状和不同颜色的图形呢?如果用继承方式,m种形状和n种颜色的图形就有m×n种,不但对应的子类很多,而且扩展困难。不同颜色和字体的文字、不同品牌和功率的汽车
桥接将继承转为关联,降低类之间的耦合度,减少代码量
应用场景:
1、当一个类存在两个独立变化的维度,且这两个维度都需要进行扩展时。
2、当一个系统不希望使用继承或因为多层次继承导致系统类的个数急剧增加时。
3、当一个系统需要在构件的抽象化角色和具体化角色之问增加更多的灵活性时。
4、InputStreamReader桥接模式。An InputStreamReader is a bridge from byte streams to character streams:


装饰器模式(Decorator/Wrapper Pattern)
向一个现有的对象添加新的功能,同时又不改变其结构。属于对象结构型模式。
创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能


 


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值