设计模式1
设计模式(Design Pattern):是前辈们对代码开发经验的总结,是解决特定问题的一系列套路,它不是语法规定,而是一套用来提高代码的可复用性,可维护性,可读性,稳健性以及安全性的解决方案。
设计模式有两种分类方法
1、根据目的来分
根据模式是用来完成什么工作来划分,这种方式可分为创建型模式,结构型模式,和行为型模式三种
1、创建型:用于描述怎样创建对象,他的主要特点是将对象的创建与使用分离。
2、结构型:用于描述如何将类或对象按某种布局组成更大的结构;
3、行为型:用于描述对象与或类之间怎样相互协作,共同完成单个对象无法独自完成的任务,以及怎样分配职责。
2、根据作用范围来来分
根据模式是主要用于类上,还是主要用于对象上来划分,这种方式可以分为类模式 和对象模式 两种;
1、类模式:用于处理类与子类之间的关系,这些关系通过继承来建立,是静态的,在编译时 就确定下来;
2、对象模式:用于处理对象之间的关系,这些关系可以通过组合和聚合来实现,在运行时是可以变化的,更具有动态性;
创建模式
创建模式的主要关注点是:怎样创建对象?它的主要特点是将对象的创建与使用分离,这样可以降低代码的耦合度,使用者不需要关注对象的创建细节,对象的创建由相关的工厂来完成。
创建型模式分为以下几种
1、单例模式(Singleton):某个类只能生成一个实例,该类提供了一个全局的方法,以供外部获取实例,其拓展是有限多例模式;
2、原型模式(Prototype):将一个对象作为原型,通过对其进行复制而克隆出多个和原型类似的新实例;
3、工厂方法(FactoryMethod):定义一个用于创建产品的接口,由子类决定生产什么产品;
4、抽象工厂(AbstractFactory):提供一个创建产品族的接口,其每个子类,可以生产一系列相关的产品;
5、建造者(Builder):将一个复杂对象分解成多个相对简单的部分,然后根据不同需要分别创建他们,最后构建成该复杂对象;
单例模式有三个特点
1、单例类只有一个实例对象(构造方法私有化)
2、该单例对象必须由单例类自行创建(自己new自己)
3、单例类对外提供一个全局的方法,向外界提供对象
单例模式常见的有三种
1、饿汉模式

2、懒汉模式

3、双锁机制

原型模式
将一个对象作为原型,通过对其进行复制而克隆出多个 于原型类似的新实例
原型模式的优点
1、java自带的原型模式基于内存下的二进制流的复制,在性能上比直接new一个对象更佳;
2、可以使用深克隆方式保存对象的状态,使用原型模式将对象复制一份,并将其状态保存起来,简化了创建对象的过程,以便在需要的时候使用(例如恢复到历史某一状态),可辅助实现撤销操作。
原型模式的缺点
1、需要对每一个类都配置一个clone的方法
2、clone方法在类的内部,当对已有的类进行改造时,需要修改源代码,违背了开闭原则
3、当实现深克隆时,需要编写较为复杂的代码,而当对象之间存在多重嵌套引用时,为了实现深克隆,每一个对象对应的类都需要支持深克隆,实现起来会比较麻烦,因此深克隆,浅克隆需要运用得当
工厂模式
定义一个创建产品对象的工厂接口,将产品对象的实际创建的工作 推迟到具体子类工厂当中,这满足创建型模式中的创建与使用分离的特点;
工厂模式有分为三种
1、简单工厂,又称为静态工厂
2、工厂方法:会抽取出一个抽象的工厂类,让其子类来完成具体的产品创建工作
3、抽象工厂:生产产品族的方式
如果要创建的产品不多,只要一个工厂类就可以完成,这种模式叫“简单工厂模式”。
简单工厂模式的主要角色如下:
简单工厂(SimpleFactory):是简单工厂模式的核心,负责实现创建所有实例的内部逻辑。工厂类的创建产品类的方法可以被外界直接调用,创建所需的产品对象。
抽象产品(Product):是简单工厂创建的所有对象的父类,负责描述所有实例共有的公共接口。
具体产品(ConcreteProduct):是简单工厂模式的创建目标。
工厂方法模式优点:
1、用户只需要知道具体工厂的名称就可以得到所需的产品,无需知道产品的具体创建过程
2、灵活性增强,对于新产品的创建,只需要新建一个相应的工厂类
3、典型的解耦框架,高层模块只需要知道产品的抽象类,无须关心其他的实现类,满足迪米特法则,依赖倒置原则,里式替换原则
缺点
1、类的个数容易过多,增加复杂度
2、增加了系统的抽象性和理解难度
3、抽象产品只能生产一种产品,此弊端可以用抽象工厂模式来解决
工厂方法模式的主要角色如下。
-
抽象工厂(Abstract Factory):提供了创建产品的接口,调用者通过它访问具体工厂的工厂方法 newProduct() 来创建产品。
-
具体工厂(ConcreteFactory):主要是实现抽象工厂中的抽象方法,完成具体产品的创建。
-
抽象产品(Product):定义了产品的规范,描述了产品的主要特性和功能。
-
具体产品(ConcreteProduct):实现了抽象产品角色所定义的接口,由具体工厂来创建,它同具体工厂之间一一对应。

浙公网安备 33010602011771号