设计模式
文章平均质量分 92
怎么起个名就那么难
这个作者很懒,什么都没留下…
展开
-
23种设计模式(九)桥接模式
桥接模式一般问题:一个类需要在两个以上维度扩展,采用继承方式会导致子类数量过多核心方案:将抽象部分与实现部分分离,使其都可以独立变化银行,我有活期账户,定期账户,不同的银行,打开账户public interface Account { Account openAccount(); void showAccountType();}public abstract class Bank { protected Account account; public Ba原创 2020-12-29 10:52:08 · 348 阅读 · 1 评论 -
23种设计模式(八)组合模式
组合模式树形结构,组合对象,单个对象,符合开闭原则,可以增加叶子节点根据课程举例子:课程与目录类组合 叶子节点public abstract class CatalogComponent { public void add(CatalogComponent catalogComponent){ throw new UnsupportedOperationException("不支持添加操作"); } public void remove(CatalogCo原创 2020-12-24 15:14:40 · 332 阅读 · 0 评论 -
23种设计模式(七)享元模式
享元模式享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式。相似对象,对象的复用生活中的例子:年底了,部门领导要做汇报,有很多部门,但是汇报内容,今天给王总汇报,明天李总,正好是轮休,但是这个稿子,一份就行了实现了复用性部门接口public interface Employee { void report();}public class Manag原创 2020-12-24 11:50:43 · 330 阅读 · 1 评论 -
23种设计模式(六)适配器模式
适配器模式优点:1、可以让任何两个没有关联的类一起运行。2、提高了类的复用。3、增加了类的透明度。4、灵活性好。缺点:1、过多地使用适配器,会让系统非常零乱,不易整体进行把握。比如,明明看到调用的是 A 接口,其实内部被适配成了 B接口的实现,一个系统如果太多出现这种情况,无异于一场灾难。因此如果不是很有必要,可以不使用适配器,而是直接对系统进行重构。2.由于 JAVA 至多继承一个类,所以至多只能适配一个适配者类,而且目标类必须是抽象类。接下来我拿充电器举例子,我们平时用的家用原创 2020-12-24 10:01:02 · 327 阅读 · 0 评论 -
23种设计模式(五)装饰者模式
装饰者模式扩展原有对象的功能:我买个房子(对象),我装修(不在原有的对象上进行操作),就是装饰者,动态添加,动态撤销接下来我用代码举例子:早晨我要买早餐,买的煎饼(对象),(装饰者)我有点饿加一个鸡蛋,再加一个香肠,在加一包辣条,我感觉吃不饱,我又加了一个鸡蛋在原有的基础上进行扩展抽象煎饼类煎饼的描述,价格public abstract class ABattercake { protected abstract String getDesc(); protected abst原创 2020-12-24 09:46:40 · 377 阅读 · 0 评论 -
23种设计模式(四)外观模式
外观模式通过父系统调用子系统,也就是父系统是入口,调用不同的子系统,遵守迪米特法则,最少知道原则优点:简化调用过程,无需了解子系统,防止带来风险减少系统依赖,减少系统耦合性生活中的例子:例如我在CF官网,我用积分兑换,装备,我只需要知道我能兑换装备,我不需要他具体执行的什么,具体能不能到我的账号,内部验证积分是否充足,然后减抠积分,然后通过虚拟装备系统发放到某个人的账户装备public class Equipment { private String name; publi原创 2020-12-23 14:46:02 · 321 阅读 · 1 评论 -
23种设计模式(三)原型模式
原型模式原型模式的适用场景:1.类初始化消耗资源较多2.new一个对象需要非常繁琐的过程(数据准备,访问权限等)3.构造函数比较复杂4.循环产生大量对象时优点:1.原型模式比new一个对象性能要高2.简化创建过程缺点:1.必须配备克隆方法(必须重写object的克隆方法)2.对克隆对象,进行复杂改造的时候,容易引入风险重要的是克隆常用的场景:积分抽奖,邮箱,短信ctl +t 点击 那个箭头 进行搜索...原创 2020-12-23 12:18:22 · 362 阅读 · 0 评论 -
23种设计模式(二)单例模式
单例模式优点:在内存中只有一个实例,减少了内存的开销可以避免对资源的多重占用缺点:没有接口,无法扩展必须点私有构造器,线程安全的,序列化与反序列化对单利的破坏,反射攻击懒汉式单例模式public class LazySingleton { private static LazySingleton lazySingleton=null; private LazySingleton(){ } public static LazySingleton getInst原创 2020-12-18 19:29:51 · 424 阅读 · 0 评论 -
23种设计模式(一)建造者模式
建造者模式定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。用户只需要指定需要建造的类型就可以得到他们,建造的细节完全不需要知道的产品丶抽象建造者丶具体建造者丶指挥者丶 是有这四个组成类型:创建型优点:封装性好,创建和使用分离扩展性好丶建造类之间独立丶一定程度上解耦缺点:产生多余的Builder对象产品内部发生变化,建造者都要修改,成本较大生活中的例子:现实中有很多例子,例如电冰箱,电脑,手机,食品等,课程,接下里为了理解,我拿课程去举例子:产品:课原创 2020-12-16 18:11:53 · 383 阅读 · 1 评论 -
设计模式(三)抽象工厂,不属于23中设计模式
抽象工厂直接上图,为什么说是抽象工厂,在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。也就是说,不用知道他怎么构建这个实力的。如上图:一个产品族,例如美的,海尔,格力,这三个品牌 这就是三个产品族,例如说美的 美的下面产洗衣机(正方形),电冰箱(圆形),空调(椭圆形) 这是一个产品族,然后产品的等级结构,那就是说这个空调是3匹的还是1.5匹的,还是1匹的等等 虽然很抽象,但是很现实接下来代码实现:代码的UML图,课程原创 2020-12-15 19:47:25 · 333 阅读 · 0 评论 -
设计模式(二)不属于23中设计模式
工厂方法工厂方法的优点:客户端只需要知道,我只关心所需产品对应的工厂,无需关心创建细节,加入新的产品符合开闭原则,提高可扩展性;工厂方法的缺点:类的个数不断增加,类的个数不断增多,增加复杂度,增加了系统的抽象性,和理解难度工厂方法创建的过程,依赖于子类的进行构建,契约为父类,实现为子类生活中较好的例子: 如下例子很好理解: 视频为抽象方法,这个是已知的,定义为抽象方法,然后有前端视频,Python视频,java视频 这属于产品组,但是我想要获取视频,肯定是通过产品的工厂去获取,产品工厂,不同视原创 2020-12-14 14:56:58 · 359 阅读 · 0 评论 -
设计模式(一)简单工厂模式
简单工厂模式(不属于23中设计模式)简单工厂模式,见名之意,工厂用来做什么的,在生活中,工厂就是造东西的,为什么称之为简单工厂模式,简单工厂模式不属于23设计模式中,但是他是工厂模式的设计的思想接下来举例子,类似于我传入相应的参数,他就会帮我造出来一个对象,我只需要把我的需求给他,他就会给我造出对应的东西简单工厂模式:JDK源码解析为操作日历字段(例如获得下星期的日期)提供了一些方法,此类,大家看到了这应用了简单工厂模式大家看不懂这个图不要着急:接下来一一解析获取实例,继续往下看到这里大原创 2020-12-14 13:02:11 · 339 阅读 · 0 评论 -
设计模式的五大原则(五)
迪米特原则一个对象对其他对象最少的了解,又叫做最少知道的原则尽量降低,类与类之间的耦合,类之间的弱耦合,如果大量使用迪米特法则生活中的迪米特原则例如:Boos 让部门经理我要你们部门的人的所有材料,显然Boos不会亲自干这个事了,Boos通知部门经理,部门经理在通知工作人员你们把材料交到我的手中,经理整理完事之后,进行汇总,在交到Boos手中 Boos不知道过程,我只要结果,我不认识你们部门的所有人,我只认识你们领导代码中的迪米特原则我们模仿这样一个场景 Boos下发指令找团队负责人,团队负责人原创 2020-12-11 16:46:27 · 395 阅读 · 1 评论 -
设计模式的五大原则(四)
接口的隔离原则用多个专门的接口,而不使用单一的总接口,客户端不应该依赖其他接口一个类对应一个类的依赖应该建立在最小的接口上。建立单一接口,不要建立,庞大臃肿的接口尽量细化接口,接口中的方法越少,比较好,适度就好符合我们开发中的高内聚低耦合的特性,在开发的时候考虑到要修改的地方例如说:动物有的会吃,会飞,会游泳,但是如果把他定义在一个接口中,例如Dog类去实现接口,显然, 会吃,不会飞,会游泳 这样的话 会飞这个方法只能为空了,以此类推鸟会吃,会飞,但是大雁会飞,企鹅会游泳 这样的话 另外原创 2020-12-11 15:17:55 · 347 阅读 · 0 评论 -
设计模式的五大原则(三)
单一原则1.降低类的复杂度,一个类只负责一个职责。这样写出来的代码逻辑肯定要比负责多项职责简单得多。2.提高类的可读性,提高系统的可维护性。3.降低变更引起的风险。变更是必然的,如果单一职责原则遵守得好,当修改一个功能的时候可以显著降低对其他功能的影响。需要说明的一点是,单一职责原则不只是面向对象编程思想所特有的,只要是模块化的程序设计,都适用单一职责原则。比如说单一职责原则不仅仅适用于类,还适用于方法。如果一个类负责两个 功能 如果需求变更 导致2不能用了 ,要将类拆分一个类 一个接口原创 2020-12-11 13:08:09 · 411 阅读 · 0 评论 -
设计模式的五大原则(二)
依赖倒置原则优点:可以减少类间的耦合性丶提高系统稳定性,提高代码可读性和可维护性,可降低修改程序所造成的风险,Spring的 IOC DI 依赖注入也采用了依赖倒置生活中的的依赖倒置原则:例如说:春运都回家,但是回家的地点则不同,那每个人到站不同,但是都会从12306买票回家代码中演示依赖倒置我拿课程去举例子:接下来创建一个接口ICourse,抽象方法学习课程public interface ICourse { void studyCourse();}有不同的课程,我想学习哪原创 2020-12-11 12:27:52 · 367 阅读 · 0 评论 -
设计模式的五大原则(一)
开闭原则生活中的开闭原则代码演示开闭原则开闭原则是面向对象设计中最基础的设计原则,它指导我们如何建立稳定灵活的系统。开闭原则可能是设计模式五项原则中定义最模糊的一个了,它只告诉我们对扩展开放,对修改关闭,可是到底如何才能做到对扩展开放,对修改关闭,并没有明确的告诉我们。以前,如果有人告诉我“你进行设计的时候一定要遵守开闭原则”,我会觉的他什么都没说,但貌似又什么都说了。因为开闭原则抽象。生活中的开闭原则例如说:公司规定每天工作8小时,这是闭规则但是弹性工作制,只需要遵守每天工作八小时即可,这么说虽原创 2020-12-11 10:38:11 · 506 阅读 · 6 评论