设计模式——创建类模式

一、单例模式(SP):

  1. 定义:
    确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。
  2. 优点:
    (1)单例模式在内存中只有一个实例,减少了内存开支;
    (2)减少了系统的性能开销;
    (3)避免对资源的多重占用;
    (4)可以在全局设置资源访问点,优化和共享资源访问;
  3. 缺点:
    (1)一般没有接口,难以扩展;
    (2)对测试不利;
    (3)和单一职责原则冲突。
  4. 使用场景(需注意:多线程并发和单例复制两种情况):
    (1)要求生成唯一序列号的环境;
    (2)在整个项目中需要一个共享访问点或者共享数据(如web页面上的计数器);
    (3)创建对象消耗的资源的过多(如I/O操作和数据库);
    (4)需要定义大量的静态常量和静态方法(如工具类)的环境。

二、工厂方法模式:

  1. 定义:
    定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。
  2. 优点:
    (1)封装性好;
    (2)扩展性好;
    (3)屏蔽产品类;
    (4)工厂方法模式是典型的解耦框架,符合迪米特法则、依赖倒置原则和里氏替换原则。
  3. 应用场景:
    (1)工厂方法模式是new一个对象的替代品。
    (2)需要灵活的、可扩展框架时;
    (3)可用于异构系统中;
    (4)可用于测试驱动开发的框架下;
  4. 扩展:
    (1)缩小为简单工厂模式;
    (2)升级为多个工厂类;
    (3)替代单例模式;
    (4)延迟初始化;

三、抽象工厂模式(AFP):

  1. 定义:
    为创建一组相关或相互依赖的对象提供一个接口,而且无须指定它们的具体类。
  2. 优点:
    (1)封装性;
    (2)产品族内的约束为非公开状态;
  3. 缺点:
    产品族扩展非常困难。(但增加一个产品等级则相对简单,且符合开闭原则。)
  4. 使用场景:
    当一个对象族(或是一组没有任何关系的对象)都有相同的约束,则可以使用抽象工厂模式。

四、建造者模式(BP):

  1. 定义:
    将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
  2. 四个角色:
    Product产品类、Builder抽象建造者、ConcreteBuilder具体建造者和Director导演类。
  3. 优点:
    (1)封装性;
    (2)建造者独立,容易扩展;
    (3)便于控制细节风险。
  4. 使用场景:
    (1)相同的方法,不同的执行顺序,产生不同的事件结果;
    (2)多个部件或零件都可以装到一个对象中,但产生的结果又不相同时;
    (3)产品类非常复杂或产品类中的调用顺序不同产生了不同的效能;
    (4)在对象创建过程中用到了其他对象。
  5. 建造者模式和工厂方法模式的区别:
    建造者模式和工厂方法模式非常相似,它们之间最大的区别在于:建造者模式最主要的功能是基本方法调用的顺序安排。
  6. 实践:
    通常和模板方法模式一起使用。

五、原型模式(PP)(又叫克隆模式):

  1. 定义:
    用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。(核心是clone方法)
  2. 优点:
    (1)性能优良;(相对于new一个对象而言,性能更优越)
    (2)逃避构造函数的约束。(copy一个对象时,构造函数不被执行)
  3. 使用场景:(通常和抽象工厂模式相结合)
    (1)资源优化场景(类初始化需要消化非常多的资源);
    (2)性能和安全要求的场景;
    (3)一个对象多个修改者的场景。
  4. 注意事项:(使用原型模式时,引用的成员变量必须满足两个条件才不会被拷贝:一是类的成员变量,而不是方法内变量;二是必须是一个可变的引用对象,而不是一个原始类型或不可变对象)
    (1)构造函数不会被执行;
    (2)浅拷贝与深拷贝;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦里逆天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值