zoukankan      html  css  js  c++  java
  • 【设计模式】创建型模式

    写在前面

    我们已经知道,设计模式有23种:

    设计模式类型 包括
    创建型模式 (5种) 单例模式、抽象工厂模式、建造者模式、工厂方法模式、原型模式
    结构型模式(7种) 适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式
    行为型模式 (11种) 模版方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式(Interpreter模式)、状态模式、策略模式、职责链模式、访问者模式

    接下来对创建型模式进行一个详细的介绍和说明

    单例模式

    保证一个类仅有一个实例,并提供一个访问它的全局访问点

    优点:
    1,单例模式提供了对唯一实例的访问
    2,在系统内存中只存在一个对象,所以可以节约系统资源
    缺点:
    单例扩展有较大困难
    抽象工厂模式:

    提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类

    优点:
    抽象工厂,顾名思义就是对于客户来说,它是抽象的,也就是客户不需要知道什么被创建,从而可以减少客户端与具体产品类之间的依赖,进而使得系统的耦合度降低,使得后期的维护和扩展更加方便。
    缺点:
    很难支持新产品的变化。因为在抽象接口中已经确定了可以被创建的产品集合,如果需要添加新的产品,就需要更改抽象工厂的接口,这样就涉及到了抽象工厂的类及其所有子类的改变,也就违背了“开放-关闭”的原则
    建造者模式:

    将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式是一种对象创建型模式。

    优点:
    1,客户端不必知道产品内部组成的细节,将产品本身与产品的创建过程解耦,使得相同的创建过程可以创建不同的产品对象。
    2, 每一个具体建造者都相对独立,而与其他的具体建造者无关,因此可以很方便地替换具体建造者或增加新的具体建造者,用户使用不同的具体建造者即可得到不同的产品对象。符合“开放-封闭”原则
    3, 可以更加精细地控制产品的创建过程
    缺点
    1, 建造者模式所创建的产品一般具有较多的共同点,其组成部分相似,如果产品之间的差异性很大,不适合使用建造者模式,因此其使用范围受到一定的限制。
    2,如果产品的内部变化复杂,可能会导致需要定义很多具体建造者类来实现这种变化,导致系统变得很庞大,增加系统的理解难度和运行成本
    工厂方法模式:

    定义一个用于创建对象的接口,让子类决定实例化哪一个类

    优点:
    1,工厂方法来创建客户所需要的产品,而客户只需要关心所需产品对应的工厂即可,不需要关心创建细节,甚至不需要知道具体产品类的类名
    2,能够让工厂自主确定创建何种产品对象,而如何创建这个对象的细节,完全封装在具体工厂内部。
    3,当系统需要加入新产品时,无须修改抽象工厂或抽象产品提供的接口,不需要修改客户端,也不需要修改其他具体的工厂和产品,只需要再添加一个新的具体工厂和产品就OK。使得系统的可扩展性变得很好,符合“开放-封闭”原则
    缺点:
    在添加新产品时,需要编写新的类,还要添加与之对应的具体工厂类,在一定程度上增加了系统的复杂度
    原型模式:

    使用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型模式是一种对象创建型模式。

    优点:
    1,当创建新的对象实例较为复杂时,使用原型模式可以简化对象的创建过程
    2,扩展性较好
    缺点:
    需要为每一个类配备一个克隆方法

    总结

    到这里只是进行了一个简单的了解,在以后的过程中,还会再学习。
    感谢您的阅读~~

  • 相关阅读:
    Angularjs实现分页--并展示
    angularjs后台查询所有,前台实现分页显示 https://my.oschina.net/gmd/blog/670895
    springmvc导出excel到本地,弹出下载路径选择框
    文件下载
    springmvc测试类中如何引入controller与service,request,respon
    读取数据到txt中
    junit测试时报错 ass not found com.mogodb.test.test java.lang.ClassNotFoundException: com.mogodb.test.test at java.net.URLClassLoader$1.run(URLClassLoader.java:202) at java.security.AccessController.doPri
    pom.xml中添加client jar包
    angluarjs+springmvc实现excel上传并解析,对个别字段进行非空校验,txt生成,txt生成的条件为某列必须为某值且只提供固定的几列发送到ftp
    python的min()函数也可用于比较tuple
  • 原文地址:https://www.cnblogs.com/zll-0405/p/12534171.html
Copyright © 2011-2022 走看看