![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计原则
ba_pi
这个作者很懒,什么都没留下…
展开
-
23种设计模式之解释器模式
解释器模式解释器(Interpreter)模式的定义:给分析对象定义一个语言,并定义该语言的文法表示,再设计一个解析器来解释语言中的句子。也就是说,用编译语言的方式来分析应用中的实例。这种模式实现了文法表达式处理的接口,该接口解释一个特定的上下文。优点:扩展性好。容易实现。缺点:执行效率较低。会引起类膨胀。可应用的场景比较少。代码如下public class InterpreterPatternTest { public static void main(String[] a原创 2022-01-07 14:28:58 · 98 阅读 · 0 评论 -
23种设计模式之享元模式
享元模式享元(Flyweight)模式的定义:运用共享技术来有效地支持大量细粒度对象的复用。它通过共享已经存在的对象来大幅度减少需要创建的对象数量、避免大量相似类的开销,从而提高系统资源的利用率。享元模式的本质是缓存共享对象,降低内存消耗。享元模式的主要优点是:相同对象只要保存一份,这降低了系统中对象的数量,从而降低了系统中细粒度对象给内存带来的压力。其主要缺点是:为了使对象可以共享,需要将一些不能共享的状态外部化,这将增加程序的复杂性。读取享元模式的外部状态会使得运行时间稍微变长。pub原创 2022-01-06 21:52:21 · 86 阅读 · 0 评论 -
23种设计模式之装饰器模式
装饰器模式装饰器(Decorator)模式的定义:指在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式,它属于对象结构型模式。装饰器模式的主要优点:装饰器是继承的有力补充,比继承灵活,在不改变原有对象的情况下,动态的给一个对象扩展功能,即插即用通过使用不用装饰类及这些装饰类的排列组合,可以实现不同效果装饰器模式完全遵守开闭原则有些人早餐可能会吃煎饼,煎饼中可以加鸡蛋,也可以加香肠,但是不管怎么“加码”,都还是一个煎饼。在现实生活中,常常需要对现有产品增加新的功能原创 2021-12-16 19:53:27 · 309 阅读 · 0 评论 -
23种设计模式之桥接模式
桥接模式桥接(Bridge)模式的定义如下:将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度。举个栗子。车企生产汽车,有不同类型以及不同颜色,例如生产suv,吉普车,轿车,颜色以红色与黄色举例。遵循了里氏替换原则和依赖倒置原则,最终实现了开闭原则,对修改关闭,对扩展开放。桥接(Bridge)模式的优点是:抽象与实现分离,扩展能力强符合开闭原则符合合成复用原则其实现细节对客户透明所以在学习设计模式的时候发现与设计原则在很大原创 2021-12-15 18:02:12 · 269 阅读 · 0 评论 -
23种设计模式之代理模式
代理模式代理模式有2种应用场景1.权限控制。2.功能增强。例:一酒厂不直接卖酒,通过代理商来卖酒,代理商进行包装及返点卖给客户。直接上代码public class WineProxyTest { public static void main(String[] args) { WineProxyStore wineProxyStore = new WineProxyStore(); wineProxyStore.sell(); }}int原创 2021-12-07 20:34:59 · 238 阅读 · 0 评论 -
23种设计模式之建造者模式
建造者(Builder)模式由产品、抽象建造者、具体建造者、指挥者等 4 个要素构成。用建造者(Builder)模式描述客厅装修。这里客厅是产品,包括墙、电视和沙发等组成部分。具体装修工人是具体建造者,他们负责装修与墙、电视和沙发的布局。项目经理是指挥者,他负责指挥装修工人进行装修。public class ParlourDecorator { public static void main(String[] args) { try { Decorato原创 2021-12-05 22:25:56 · 247 阅读 · 0 评论 -
23种设计模式之原型模式
原型模式用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象。原型模式有2种实现方式,浅克隆和深克隆。浅克隆:创建一个新对象,新对象的属性和原来对象完全相同,对于非基本类型属性,仍指向原有属性所指向的对象的内存地址。深克隆:创建一个新对象,属性中引用的其他对象也会被克隆,不再指向原有对象地址。由于 Java 提供了对象的 clone() 方法,所以用 Java 实现原型模式很简单。实现Cloneable接口,重写clone方法。例如,user类: /**原创 2021-11-20 11:51:34 · 91 阅读 · 0 评论 -
软件设计七大原则之合成复用原则
合成复用原则它要求在软件复用时,要尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现。汽车分类管理程序。汽车按“动力源”划分可分为汽油汽车、电动汽车等;按“颜色”划分可分为黄色汽车和红色汽车等,UML图如下汽车相关类public abstract class Car { Color color; public Car(Color color) { this.color = color; } void move() { }原创 2021-11-16 20:58:08 · 495 阅读 · 1 评论 -
软件设计七大原则之迪米特法则
迪米特法则迪米特法则的定义是:只与你的直接朋友交谈,不跟“陌生人”说话。它强调以下两点:1.从依赖者的角度来说,只依赖应该依赖的对象。2.从被依赖者的角度说,只暴露应该暴露的方法。目的是降低耦合性。例:明星与经纪人的关系实例。明星由于全身心投入艺术,所以许多日常事务由经纪人负责处理,如与粉丝的见面会,与媒体公司的业务洽淡等。这里的经纪人是明星的朋友,而粉丝和媒体公司是陌生人,所以适合使用迪米特法则,uml图如下/** * 媒体公司 * @author zwzh_zj */public原创 2021-11-16 20:13:26 · 156 阅读 · 0 评论 -
软件设计七大原则之接口隔离原则
接口隔离原则定义:一个类对另一个类的依赖应该建立在最小的接口上接口隔离原则和单一职责都是为了提高类的内聚性、降低它们之间的耦合性,体现了封装的思想,但两者是不同的:单一职责原则注重的是职责,而接口隔离原则注重的是对接口依赖的隔离。单一职责原则主要是约束类,它针对的是程序中的实现和细节;接口隔离原则主要约束接口,主要针对抽象和程序整体框架的构建。例 学生成绩管理程序分析:学生成绩管理程序一般包含插入成绩、删除成绩、修改成绩、计算总分、计算均分、打印成绩信息、査询成绩信息等功能,如果将这些功能全原创 2021-11-15 20:52:08 · 185 阅读 · 0 评论 -
软件设计七大原则之单一职责原则
单一职责原则单一职责原则的核心就是控制类的粒度大小、将对象解耦、提高其内聚性。例1:大学学生工作管理程序。分析:大学学生工作主要包括学生生活辅导和学生学业指导两个方面的工作,其中生活辅导主要包括班委建设、出勤统计、心理辅导、费用催缴、班级管理等工作,学业指导主要包括专业引导、学习辅导、科研指导、学习总结等工作。如果将这些工作交给一位老师负责显然不合理,正确的做法是生活辅导由辅导员负责,学业指导由学业导师负责。uml图如下三个类代码如下:public interface Student {原创 2021-11-15 14:32:41 · 504 阅读 · 0 评论 -
软件设计七大原则之依赖倒置原则
依赖倒置原则核心思想是:要面向接口编程,不要面向实现编程。例1:顾客购物程序。分析,顾客购物从然后从成都商店和兰州商店购物。uml图如下1.顾客会从很多家商店购物,抽象一个商店接口,public interface Shop { void sell();}2.兰州与成都商店实现shop购买方式public class ChengduShop implements Shop { @Override public void sell() { Syste原创 2021-11-13 17:26:26 · 1278 阅读 · 0 评论 -
软件设计七大原则之里氏替换原则
里氏替换原则简单描述:子类可以扩展父类的功能,但不能改变父类原有的功能。也就是说:子类继承父类时,除添加新的方法完成新增功能外,尽量不要重写父类的方法。几维鸟不是鸟分析:鸟一般都会飞行,如燕子的飞行速度大概是每小时 120 千米。但是新西兰的几维鸟由于翅膀退化无法飞行。假如要设计一个实例,计算这两种鸟飞行 300 千米要花费的时间。显然,拿燕子来测试这段代码,结果正确,能计算出所需要的时间;但拿几维鸟来测试,结果会发生“除零异常”或是“无穷大”。几维鸟类重写了鸟类的 setSpeed(doubl原创 2021-11-13 14:22:22 · 735 阅读 · 0 评论 -
软件设计七大原则之开闭原则
开闭原则简单描述:对扩展开放,对修改关闭。开闭原则的含义是:当应用的需求改变时,在不修改软件实体的源代码或者二进制代码的前提下,可以扩展模块的功能,使其满足新的需求。实例1:课程以C语言中文网的教程体系为例,来讲解如何使用开闭原则解决实际问题。创建一个 Java 教程的类 JavaCourse。现在要给 Java 教程做活动,价格优惠。如果修改 JavaCourse 类中的 getPrice() 方法,则会存在一定防线,可能影响到其它地方的调用结果。UML图1.首先创建一个教程接口 IC原创 2021-11-11 12:02:38 · 1773 阅读 · 0 评论