设计模式1--创建型模式

*爱你&永不变心* 提交于 2019-11-29 17:15:42

一.前言

  面向对象代码经常用到的就是创建对象,

  创建型设计模式就是把对象的创建和对象的使用分离开。

  在写类的时候使用创建型模式会使得之后获取对象方便。

 

二.四种创建者模式:

 

1.单例模式

理解:一个类只有一个对象,节省了内存,4种可用方法 经常进行创建和销毁的对象,经常用到的重量级对象用单例模式(比如数据源,session工 厂)
构造方法:(每句话都是一小段代码 )
(1).饿汉式2种(静态变量/静态代码块):

  类内创建静态对象实例 并提供静态get方法  (即构造器私有化)

    静态变量类加载时就执行,所以没有懒加载,

    可能造成内存浪费 静态变量类加载相关机制加载一次,保证了线程安全

  

 

 

 

(2).懒汉式3种:

  类内定义静态对象成员变量 并由静态get方法提供对象实例 (instance方法过滤构造方法)

     get方法不加锁线程不安全,方法加锁效率低,instance==null内加锁线程不安全                              

     要控制的是单对象,锁资源只 是控制顺序

 

 

 


(3).双重检查(好):

  类内定义静态对象成员变量 并由静态get方法提供对象实例  在第一次创建对象时,对类加载器加锁并进行第二次空对象判断


(4).静态内部类方法:  

  构造器私有化,在内部类中创建静态对象实例,并提供get方

    利用静态内部类机制,安全高效,推荐使用

 

5).枚举方式:

  给类写成枚举类 避免多线程,防止反序列化,推荐使用

 

 

2.原型模式

  情况:要创建许多一样的对象时

  做法:创建者类类继承cloneable接口

  例子:生产出10只一样的羊

    新建十个相同的羊的代码变成两部分:使用者部分和创建者部分

    创建者就是羊类,实现cloneable接口,遍历属性的工作交给clone方法,之后新增属 性使用者不 必理会,等于属性的扩展性在复制时增强了。

    使用者类再生成第一只羊后,其它羊就可以调用第一只羊的clone方法得到;新增羊属性,提供者类的代码只需在第一只羊改变

 

3.1  简单工厂模式

 

理解:将抽象类的创建代码封装成一个工厂对象,对外只要求一个类型参数

 

把代码分成4部分,client,使用类(直接调用创造者类),工厂类和创造者类

  使用类:聚合工厂类

  工厂类:工厂方法根据 具体创造者类标志,选择进行 相应创造类的构造

  如果加功能类只改工厂方法

 

3.2  抽象工厂模式

 

理解:当创建者类很多时,简单工厂的判断就很多else / if ,所以根据创建者类型不同进行分类,

  一个类别一个工厂,对多工厂类共同实现工厂接口,工厂接口被使用类聚合

 

  使用类:只聚合一个抽象工厂,生产方法只需提供创建者类类的统一接口

  抽象工厂接口:定义工厂方法

  工厂类:和简单工厂类相同,工厂方法要类型参数

  创建者类:再按一个标准分属于不同工厂类,

  client:新建使用者类和工厂类对象

    将工厂对象传给使用者类

    将类型标识传给构造方法

 

 

建造者模式

适用点:适合方法相似的类的情况。

理解:建造者模式主要是建造者类聚合了产品类并且定义了建筑方法被子类重写,并被导演类聚合

    导演类根据的是传入的建造子类对象生成产品。

    

 

示例:工厂建房子

  

  把代码分成4部分,client,使用类(直接调用功能类),建造者类和产品类

        新增子类创造者,使用类和产品类都不变

  HouseDirector是工厂,聚合HouseBuilder接口/抽象类,含有它的构造器;有构造房子方法,稳定

  House和HouseBuilder是产品和流程的解耦

  House就是一个Bean,稳定

  HouseBuilder接口就是Bean对象的各种方法的抽象

      其实现类具体实现该方法

  Client即用户(前端)使用HouseBuiler的子类

 

 

 

  

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!