首页

文章

如何构建不能实例化的对象

发布网友 发布时间:2022-04-20 04:36

我来回答

1个回答

热心网友 时间:2023-09-29 19:01

Java常见设计模式快来看看

1、创建型-工厂方法模式:

(1)简单工厂模式:

建立一个工厂类,并定义一个接口对实现了同一接口的产品类进行创建。

(2)工厂方法模式:

工厂方法模式是对简单工厂模式的改进,简单工厂的缺陷在干不符合“开闭原则”

(3)静态工厂方法模式:

静态工厂模式是将工厂方法模式里的方法置为静态的,不需要创建实例,直接调用即可。

2、创建型-抽象工厂模式:

抽象工厂模式主要用于创建相关对象的家族。当一个产品族中需要被设计在一起工作时,通过抽象工厂模式,能够保证客户端始终只使用同一个产品族中的对象:并且通过隔离具体类的生成,使得客户端不需要明确指定具体生成类;所有的具体工厂都实现了抽象工厂中定义的公共接口,因此只需要改变具体工厂的实例,就可以在某种程度上改变整个软件系统的行为。

但该模式的缺点在于添加新的行为时比较麻烦,如果需要添加一个新产品族对象时,需要更改接口及其下所有子类,这必然会带来很大的麻烦。

3、创建型-建造者模式:

建造者模式将复杂产品的创建步骤分解在在不同的方法中使得创建过程更加清晰,从而更精确控制复杂对象的产生过程;通过隔离复杂对象的构建与使用,也就是将产品的创建与产品本身分离开来,使得同样的构建过程可以创建不同的对象;并且每个具体建造者都相互独立,因此可以很方便地替换具体建造者或增加新的具体建造者,用户使用不同的具体建造者即可得到不同的产品对象。


4、创建型-单例模式

单例模式可以确保系统中某个类只有一个实例,该类自行实例化并向整个系统提供这个实例的公共访问点,除了该公共访问点,不能通过其他途径访问该实例。单例模式的优点在于:系统中只存在一个共用的实例对象,无需频繁创建和销毁对象,节约了系统资源,提高系统的性能可以严格控制客户怎么样以及何时访问单例对象。单例模式的写法有好几种,主要有三种:懒汉式单例、饿汉式单例、登记式单例。

5、创建型-原型模式:

在 Java 中,原型模式的核心是就是原型类 Prototype,Prototype类需要具备以下两个条件:实现 Cloneable 接口:

重写 Object 类中的 clone() 方法,用于返回对象的拷贝;Object 类中的 clone() 方法默认是浅拷贝,如果想要深拷贝对象,则需要在 clone() 方法中自定义自己的复制逻辑。浅复制:将一个对象复制后,基本数据类型的变量会重新创建,而引用类型指向的还是原对象所指向的内存地址。深复制:将一个对象复制后,不论是基本数据类型还有引用类型,都是重新创建的。

使用原型模式进行创建对象不仅简化对象的创建步骤,还比new 方式创建对象的性能要好的多,因为 Object 类的clone() 方法是一个本地方法,直接操作内存中的二进制流特别是复制大对象时,性能的差别非常明显

6.结构型-适配器模式

适配器模式主要用于将一个类或者接口转化成客户端希望的格式,使得原本不兼容的类可以在一起工作,将目标类和适配者类解耦;同时也符合“开闭原则”,可以在不修改原代码的基础上增加新的适配器类;将具体的实现封装在适配者类中,对于客户端类来说是透明的,而且提高了适配者的复用性,但是缺点在于更换适配器的实现过程比较复杂。

所以,适配器模式比较适合以下场景:

(1)系统需要使用现有的类,而这些类的接口不符合系统的接

(2)使用第三方组件,组件接口定义和自己定义的不同,不希望修改自己的接口,但是要使用第三方组件接口的功能。

7、结构型-装饰器模式:

装饰器模式可以动态给对象添加一些额外的职责从而实现功能的拓展,在运行时选择不同的装饰器,从而实现不同的行为;比使用继承更加灵活,通过对不同的装饰类进行排列组合,创造出很多不同行为,得到功能更为强大的对象;符合“开闭原则”,被装饰类与装饰类独立变化,用户可以根据需要增加新的装饰类和被装饰类,在使用时再对其进行组合,原有代码无须改变。

但是装饰器模式也存在缺点,首先会产生很多的小对象增加了系统的复杂性,第二是排错比较困难,对于多次装饰的对象,调试时寻找错误可能需要逐级排查,较为烦琐。

8、结构型-代理模式:

代理模式的设计动机是通过代理对象来访问真实对象,通过建立一个对象代理类,由代理对象控制原对象的引用,从而实现对真实对象的操作。在代理模式中,代理对象主要起到一个中介的作用,用于协调与连接调用者(即客户端)和被调用者(即目标对象),在一定程度上降低了系统的耦合度,同时也保护了目标对象。但缺点是在调用者与被调用者之间增加了代理对象,可能会造成请求的处理速度变慢。

9、结构型-桥接模式:

桥接模式将系统的抽象部分与实现部分分离解耦,使他们可以独立的变化。为了达到让抽象部分和实现部分独立变化的目的,桥接模式使用组合关系来代替继承关系,抽象部分拥有实现部分的接口对象,从而能够通过这个接口对象来调用具体实现部分的功能。也就是说,桥接模式中的桥接是一个单方向的关系,只能够抽象部分去使用奖现部分的对象,而不能反过来。

桥接模式符合“开闭原则”,提高了系统的可拓展性,在两个变化维度中任意扩展一个维度,都不需要修改原来的系统:并且实现细节对客户不透明,可以隐藏实现细节。但是由于聚合关系建立在抽象层,要求开发者针对抽象进行编程,这增加系统的理解和设计难度。

10、结构型-外观模式:

观模式通过对客户端提供一个统一的接口,用于访问子系统中的一群接口。使用外观模式有以下几点好处:

(1)更加易用:使得子系统更加易用,客户端不再需要了解子系统内部的实现,也不需要跟众多子系统内部的模块进行交互,只需要跟外观类交互就可以了;

(2)松散耦合:将客户端与子系统解耦,让子系统内部的模块能更容易扩展和维护。

(3)更好的划分访问层次: 通过合理使用 Facade,可以更好地划分访问的层次,有些方法是对系统外的,有些方法是系统内部使用的。把需要暴露给外部的功能集中到门面中,这样既方便客户端使用,也很好地隐藏了内部的细节。

11、结构型-组合模式:

组合模式将叶子对象和容器对象进行递归组合,形成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性,能够像处理叶子对象一样来处理组合对象,无需进行区分,从而使用户程序能够与复杂元素的内部结构进行解耦。

组合模式最关键的地方是叶子对象和组合对象实现了相同的抽象构建类,它既可表示叶子对象,也可表示容器对象,客户仅仅需要针对这个抽象构建类进行编程,这就是组合模式能够将叶子节点和对象节点进行一致处理的原因。

12、结构型-享元模式:

享元模式通过共享技术有效地支持细粒度、状态变化小的对象复用,当系统中存在有多个相同的对象,那么只共享一份不必每个都去实例化一个对象,极大地减少系统中对象的数量,从而节省资源。

享元模式的核心是享元工厂类,享元工厂类维护了一个对象存储池,当客户端需要对象时,首先从享元池中获取,如果享元池中存在对象实例则直接返回,如果享元池中不存在,则创建一个新的享元对象实例返回给用户,并在享元池中保存该新增对象,这点有些单例的意思。

工厂类通常会使用集合类型来保存对象,如 HashMap、Hashtable、Vector 等等,在 Java 中,数据库连接池、线程池等都是用享元模式的应用。

八月中国最凉快的地方 八月份哪里最凉快,去哪旅游好?美丽的地方 乱字同韵字是什么意思 华硕笔记本电脑触摸板怎么开笔记本电脑触摸板怎么开启和关闭_百度知 ... 陕西职务侵占案立案准则 结婚后我的恋情维系了十年,怎么做到的? 玉米仁子饭产自哪里 中国期货交易所的交易品种有哪些? 历史要怎么读,有啥诀窍 高中历史诀窍 年终会活动策划方案 深度解析:第一财经回放,探索财经新风向 逆水寒手游庄园怎么邀请好友同住 逆水寒手游 逆水寒不同区可以一起组队吗? 逆水寒手游 逆水寒怎么进入好友世界? 逆水寒手游 逆水寒怎么去别人的庄园? 使用puppeteer实现将htmll转成pdf 内卷时代下的前端技术-使用JavaScript在浏览器中生成PDF文档 【译】将HTML转为PDF的几种实现方案 变形金刚08动画怎么样 变形金刚08动画的问题 变形金刚08动画日语版剧情介绍 高分!换显卡nvidia控制面板被我卸了,重新安装显卡驱动后没了nvidia控... 我的nvidia控制面板被卸载了 怎么找回啊 卸载后 这个画面看着很奇怪_百 ... 李卓彬工作简历 林少明工作简历 广东工业职业技术学院怎么样 郑德涛任职简历 唐新桂个人简历 土地入股的定义 ups快递客服电话24小时 贷款记录在征信保留几年? 安徽徽商城有限公司公司简介 安徽省徽商集团新能源股份有限公司基本情况 安徽省徽商集团有限公司经营理念 2019哈尔滨煤气费怎么有税? 快手删除的作品如何恢复 体育理念体育理念 有关体育的格言和理念 什么是体育理念 万里挑一算彩礼还是见面礼 绿萝扦插多少天后发芽 绿萝扦插多久发芽 扦插绿萝多久发芽 炖牛排骨的做法和配料 网络诈骗定罪标准揭秘 “流水不争先”是什么意思? mc中钻石装备怎么做 为什么我的MC里的钻石块是这样的?我想要那种。是不是版本的问题?如果是... 带“偷儿”的诗句 JAVA类中含抽象方法就一定不能实例化?!一定不能是吧 java 抽象类不能直接进行实例化的操作,但可以声明对象 System类为什么不能实例化 java 为什么接口不能实例化 抽象类不是不能实例化吗,为什么作为参数可以? 不能实例化抽象类 是什么原因? Java中的抽象类为什么不能实例化 在C#中如何定义不能被实例化的类?何时定义一个不需... 在Java中,一个类不能被实例化的原因有哪些? 抽象类为什么不能实例化? java抽象类不能实例化? java中哪些类不可以实例化对象 java哪些不可以实例化(除了抽象类) 鲁迅先生有什么精神品质 朝花夕拾人物简介,随便哪个都行 鲁迅先生是怎样去世的? 有关鲁迅先生的平生的资料(简单的) 关于鲁迅先生的资料 鲁迅的简介,著作主要内容 鲁迅先生是一个怎样的人?他又有什么精神?什么品质? 抽象类为什么不能实例化 请问C#中static为什么不能实例化? C++ 引用性说明类不能实例化对象 抽象类不能实例... 插件无法实例化还有冲突问题怎么解决? 祝孩子十周岁生日快乐祝福语怎么说? 小孩十岁生日怎么祝福 小朋友十周岁生日祝福语 孩子10岁生日怎么发朋友圈?有哪些句子? 十岁小孩子生日该怎么祝福 朋友小孩过十岁生日怎么祝福 儿童十岁生日发言词怎么说? 孩子十岁的生日,怎么写家长对孩子想说的话 小朋友十岁生日,如何庆祝 孩子十周岁生日宴,应该怎么办 孩子十岁生日父母感言朋友圈怎么发? 儿子十岁的生日宴怎么发短信邀请啊, 直到曙光照亮清晨 他都会在这守护你 是《他是龙》... 他是龙片尾曲的中文意思 колыбельная(俄语歌曲)是哪个电影里的歌曲 看了中文版的《他是龙》,然后里面后来她召唤龙自...
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com