设计模式
正月看飞雪
这个作者很懒,什么都没留下…
展开
-
设计模式七大原则-依赖倒转原则
依赖倒转原则(Dependence Inversion Principle)是指:1)高层模块不应该依赖低层模块,二者都应该依赖其抽象2)抽象不应该依赖细节,细节应该依赖抽象3)依赖倒转(倒置)的中心思想是面向接口编程4)依赖倒转原则是基于这样的设计理念:相对于细节的多变性,抽象的东西要稳定的多。以抽象为基础搭建的架构比以细节为基础的架构要稳定的多。在java中,抽象指的是接口或抽象类,细节就是具体的实现类5)使用接口或抽象类的目的是制定好规范,而不涉及任何具体的操作,把展现细节的任务交给他们原创 2021-07-05 15:33:17 · 90 阅读 · 0 评论 -
装饰者模式
装饰者模式:动态的将新功能附加到对象上。在对象功能扩展方面,它比继承更有弹性,装饰者模式也体现了开闭原则(ocp)这里提到的动态的将新功能附加到对象和ocp原则,在后面的应用实例上会以代码的形式体现。场景:我们在点咖啡的时候,会加入一些不同的配料,不同的配料和不同的咖啡会组合出不同的口味的咖啡,如果把这些组合都写成具体的类,就会类爆炸,而且调料的组合也是阶乘级别,不可能具体实现,核心就是附加,通过递归的思想,完成添加的功能。代码:public class SingleFantasy { ..原创 2021-05-27 14:06:18 · 73 阅读 · 0 评论 -
桥接模式
桥接模式: 将抽象部分与它的实现部分分离,使它们都可以独立地变化考虑到手机生产过程, 有下面这个类的关系。如果新增加一个手机样式, 就要新增加很多类,考虑如何优化这个问题。类似于, 我们使用排列组合的方式, 组合出一个我们想要的手机。这里的手机类就是我们所说的桥接类, 用于组合出我们想要的手机。public class SingleFantasy { public static void main(String[] args) throws CloneNotSupportedExcepti原创 2021-05-21 18:35:13 · 60 阅读 · 0 评论 -
适配器模式
1. 类适配器模式角色:被适配的类适配接口适配器(继承上面两个,实现适配接口的方法,在方法中,得到被适配类的成果,把成果做相应的转换,然后输出成果)使用者类场景: 手机充电时候,不能直接冲220V的电,必须室友充电器抓换成5V,这里面被适配的类(220V的电)适配接口(5V的电, 里面定义一个转换方法)适配器(在方法中拿到220V,转换成5V,然后返回)使用者类(手机, 直接使用适配器类进行充电)代码:public class SingleFantasy { publ原创 2021-05-20 16:44:02 · 71 阅读 · 0 评论 -
建造者模式
建造者模式中的4个角色:Product(产品类):要创建的对象。builder(抽象建造者):定义对象的创建过程方法。ConcreteBuilder(具体建造者):实现具体的方法,不同的创建者方法内部的代码不一样, 从而可以创建不同的对象。Director(指导者):调用具体建造者来创建复杂对象的各个部分,在指导者中不涉及具体产品的信息,只负责保证对象各部分完整创建或按某种顺序创建。简单说: 具体产品定义好产品由那些部分组成,抽象建造者定义产品组成部分的实现方法, 具体建造者实现这些方法,最后原创 2021-05-19 19:36:34 · 56 阅读 · 0 评论 -
原型模式
原型模式: 采用克隆方式,把对象的创建变成复制粘贴一样,大大的提升了性能。实现方式: 1. 类继承Cloneable接口, 这个接口的作用就是让这个类可以拷贝, 如果没有继承就去拷贝会出现异常。 2. 重写Object的clone方法浅拷贝: Object类的clone方法只会拷贝对象中的基本的数据类型,对于数组、容器对象、引用对象等都不会拷贝,这就是浅拷贝。如果要实现深拷贝,必须将原型模式中的数组、容器对象、引用对象等另行拷贝public class SingleFantasy { publ原创 2021-05-19 16:29:13 · 52 阅读 · 0 评论 -
抽象工厂
抽象工厂是简单工厂的工厂方法的结合。具体来说, 和工厂方法比较工厂方法:一个工厂对应一个产品实例化。抽象方法:一个工厂对应一系列产品实例化。public class SingleFantasy { public static void main(String[] args) { ColaChickenFactory colaChickenFactory = new ColaChickenFactory(); CurryChickenFactory curryC原创 2021-05-18 22:55:55 · 72 阅读 · 0 评论 -
工厂方法模式
在简单工厂中, 我们知道,简单工厂违背了开闭原则, 并且在食物鸡有很多种的时候, 我们要写那么多if判断, 这是很不可的, 维护性也不好,所有我们引出工厂方法。工厂方法模式:定义一个创建对象的抽象方法,由子类决定要实例化的类。工厂方法模式将对象实例化推迟到子类核心就是: 我们定义工厂的抽象类, 如果新增一个类, 就还需要新增对应的工厂,这样就不用再改变原有的代码, 提高可维护性。public class SingleFantasy { public static void main(Strin原创 2021-05-18 22:25:16 · 133 阅读 · 0 评论 -
简单工厂模式
简单工厂模式: 我们在去吃鸡的时候, 不需要去后厨找不同的厨师给我们做各种各样的鸡, 只需要给服务员说我们要吃的鸡的名称,就可以得到想要的鸡。这里: 服务员就是工厂,我们给工厂一个信息, 工厂就给我们相应的结果。这里其实违背了开闭原则, 我们增加一个菜品的时候, 需要修改工厂里面的代码。public class SingleFantasy { public static void main(String[] args) { Chicken colaChicken = Facto原创 2021-05-18 22:03:40 · 61 阅读 · 0 评论 -
单例模式
实现方式:饿汉式懒汉式静态内部类枚举1.饿汉式在类装载时候就实例化,如果这个实例始终没有调用,就造成内存浪费public class SingleFantasy { public static void main(String[] args) { Singleton instance = Singleton.getInstance(); Singleton instance2 = Singleton.getInstance(); S原创 2021-05-18 21:02:54 · 55 阅读 · 0 评论 -
设计模式七大原则详解,附带代码样例
单一替换原则(一个类只完成自己的事, 别多管闲事)接口隔离原则(客户端不应该依赖它不需要的接口,即一个类对另一个类的依赖应该建立在最小的接口上)依赖转置原则(面向接口编程, 尽量使用接口定义,子类实例化)里氏替换原则(别重写父类的方法)开闭原则(扩展功能时,自己增加代码,别去修改旧代码)迪米特法则(方法里别出现间接朋友)合成复用原则(尽量使用合成\聚合, 而不是继承)...原创 2021-05-17 21:53:26 · 85 阅读 · 0 评论 -
设计模式七大原则-依赖转置原则
依赖倒转原则(Dependence Inversion Principle)是指:高层模块不应该依赖低层模块,二者都应该依赖其抽象抽象不应该依赖细节,细节应该依赖抽象依赖倒转(倒置)的中心思想是面向接口编程依赖倒转原则是基于这样的设计理念:相对于细节的多变性,抽象的东西要稳定的多。以抽象为基础搭建的架构比以细节为基础的架构要稳定的多。在java中,抽象指的是接口或抽象类,细节就是具体的实现类使用接口或抽象类的目的是制定好规范,而不涉及任何具体的操作,把展现细节的任务交给他们的实现类去完成以一原创 2021-05-17 18:10:21 · 360 阅读 · 3 评论 -
设计模式七大原则-迪米特法则
迪米特法则一个对象应该对其他对象保持最少的了解类与类关系越密切,耦合度越大迪米特法则(Demeter Principle)又叫最少知道原则,即一个类对自己依赖的类知道的越少越好。也就是说,对于被依赖的类不管多么复杂,都尽量将逻辑封装在类的内部。对外除了提供的public方法,不对外泄露任何信息迪米特法则还有个更简单的定义:只与直接的朋友通信直接的朋友:每个对象都会与其他对象由耦合关系,只要两个对象之间有耦合关系,我们就说这两个对象之间是朋友关系。耦合的方式很多,依赖,关联,组合,聚合等。其中,我原创 2021-05-17 21:42:32 · 112 阅读 · 0 评论 -
设计模式七大原则-开闭原则
**开闭原则(Open Closed Principle)**是编程中最基础、最重要的设计原则一个软件实体如类,模块和函数应该对扩展开放,对修改关闭。用抽象构建框架,用实现扩展细节。当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化。编程中遵循其它原则,以及使用设计模式的目的就是遵循开闭原则。总结: 就是不要修改原来的代码, 如果要扩展新的功能,就只能去添加新的代码,不能去动以前的代码我们现在要写一个游戏,怪物和人物的战斗系统,代码如下:这里有3个类:原创 2021-05-17 21:22:56 · 119 阅读 · 0 评论 -
设计模式七大原则-里氏替换原则
里氏替换原则: 不要重写父类的方法以下代码就是违法了原则class A{ public int fun1(int a, int b){ return a - b; }}class B extends A{ @Override public int fun1(int a, int b){ return a + b; } public int fun2(int a, int b){ return this.f原创 2021-05-17 20:39:55 · 51 阅读 · 0 评论 -
设计模式七大原则-单一替换原则
单一替换原则: 一个类只实现单独的功能。比如: 订单类只实现订单相关功能,不去干扰员工的功能。代码:以下案例违反此原则:在改代码里面,运行结果没有问题,但是,对于不同的交通工具,我们应该创建不同的类,完成自己独特的功能。public class SingleFantasy { public static void main(String[] args) { Vehicle vehicle = new Vehicle(); vehicle.run("汽车");原创 2021-05-17 15:50:17 · 167 阅读 · 0 评论 -
设计模式七大原则-接口隔离原则
接口隔离原则: 客户端不应该依赖它不需要的接口,即一个类对另一个类的依赖应该建立在最小的接口上。违反原则的样例:类图如下:这里A依赖B的123方法,C依赖D的145方法,如果按照类图的做法,BD都必须实现接口的所有方法,这就违反了接口隔离原则代码如下:public class SingleFantasy { public static void main(String[] args) { A a = new A(); B b = new B();原创 2021-05-17 16:05:47 · 147 阅读 · 0 评论