![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
无梦想,却时常幻想
这些都是我的笔记,表述和正确性都不太确定,大家参考着看看就好,学技术还得找大佬的
展开
-
面向对象的设计原则(个人理解)
可维护,可扩展,可复用,灵活性好单一职责原则:就一个类而言,应该仅有一个引起他变化的原因不要存在多于一个导致类变更的原因,也就是说每个类应该实现单一的职责,如若不 然,就应该把类拆分。如若多个原因,当一个原因改变是,很有可能影响其他的功能如果能够想到多余一个动机去改变一个类,那么这个类就具有多余一个的职责,就应该考虑职责分离开放-封闭原则(核心原则)开闭原则就是说对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改 原有的代码,而是要扩展原有代码,实现一个热插拔的效果创造抽象来隔离同原创 2020-08-22 10:30:15 · 97 阅读 · 0 评论 -
设计带使(设计模式总结)
创建型模式对对象的实例化过程进行抽象,封装了对象的创建结构型模式对已有类和对象进行组合,来获得更好的结构行为型模式描述类或对象怎样进行交互和职责分配。原创 2020-09-01 22:02:58 · 114 阅读 · 0 评论 -
行为型模式 11 访问者模式
访问者模式Visitor表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。有某个操作,它是作用于一些元素之上的,而这些元素属于某一个对象结构。Visitor:抽象访问者: 其visit方法限定具体访问者能访问的类ConcreteVisitor:具体访问者,实现visit方法,访问后对元素类对象要做的操作Element:抽象元素类,主要为子类提供接受Visitor的功能ConcreteElement:具体元素类,实现Accept方法,格式一原创 2020-08-30 23:04:21 · 83 阅读 · 0 评论 -
行为型模式 10 解释器模式
解释器模式Interpreter给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子原创 2020-08-30 13:12:54 · 98 阅读 · 0 评论 -
结构型模式 07 享元模式
享元模式Flyweight运用共享技术有效的支持大量细粒度的对象FlyWeightFactory:享元工厂类,负责创建于管理享元对象,持有一个享元对象集合FlyWeight:抽象享元类,抽象的产品同时定义外部状态接口或实现ConcreteFlyWeight:具体享元类,具体产品类UnShareConcreteFlyWeight:不可共享角色内部状态与外部状态:内部:不会碎环境改变的共享部分外部: 随环境改变而改变的内部状态存储于Flyweight,包含独立于场景的信息(共享)外部状态取原创 2020-08-29 22:29:53 · 87 阅读 · 0 评论 -
行为型模式 09 中介者模式
中介者模式Mediator用一个中介对象来封装一系列的对象交互。中介者使得各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立的改变他们之间的交互Colleague:抽象同事类,持有Mediator引用ConcreteColleague:具体同事类:每个类只知道自己的行为,彼此互相不认识,但都认识中介者Mediator:抽象中介者,定义用于同事类之间的通信抽象方法ConcreteMediator:实现抽象方法,知道所有抽象具体同事类(可使用List),从具体同事类接收消息,在对具体同事发出原创 2020-08-29 16:14:15 · 107 阅读 · 0 评论 -
行为型模式 08 职责链模式
职责链模式使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合。将这个对象连城一条链,并沿着这条俩传递该请求,直到有一个对象处理它为止Handler:抽象处理者,定义抽象处理方法以及对下一个处理者的引用,一般为抽象类与状态模式状态模式:状态模式是把原来类中的针对自身不同状态的行为独立出去,作为了,是一个类对于不同问题的处理,每个类中上下级森严,状态迁移的顺序已经决定,不允许客户端进行操作职责链模式是不同类对于一个问题的反应,责任类不需要知道自己的下一个类是什么可以在客户端湖环境类中原创 2020-08-29 11:32:42 · 96 阅读 · 0 评论 -
行为型模式 07 命令模式
命令模式Command经一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持课撤销的操作Command:定义命令接口,声明执行的方法ConcreteCommand:实现类,实现方法,持有Receiver引用Invoker:调用者持有Command,可能多个,调用命令Receiver:接收者,命令的实际执行者(可是抽象的)对命令进行封装,使得命令请求本身成为了一个对象使用场景降低耦合,调用者与执行者分离,互相不知道是谁,可以组合多个命令,形成一个原创 2020-08-28 21:51:17 · 84 阅读 · 0 评论 -
结构型模式 06 桥接模式
桥接模式Bridge将抽象部分与他的实现部分分离,使他们都可以独立地变化实现部分是指 其抽象类和他的派生类用来实现的对象,让实现独立,使得它们各自的变化,而不会影响彼此,减小耦合使用场景实现系统有多角度分类,每一种分类都可能有变化。...原创 2020-08-25 18:13:52 · 143 阅读 · 1 评论 -
创建型模式 05 单例模式
单例模式 Singleton)保证一个类仅有一个实例,并提供一个访问它的全局访问点让类本身负责保存其唯一实例1.饿汉式:类一加载,对象就初始化缺点:生命周期长,浪费空间 优点:线程安全懒汉式:public class SingleCon { // 懒汉模式 // 1.私有化构造方法 private static boolean f = false; private SingleCon(){ if (f){ // 防止使用反射原创 2020-08-25 10:56:47 · 128 阅读 · 0 评论 -
行为型模式 06 迭代器模式
迭代器模式Iterator提供一种方法顺序访问一个聚合对象中各个元素,而又不需要暴露该对的内部表示Iterator:抽象迭代类,提供遍历所需的开始,下一个,当前是哪个,是否结束等统一接口ConcreteIterator :具体迭代类具体实现方法Aggregate :抽象聚集类,有创造Iterator的接口ConcreteAggregate:时间接口,持有一个聚集元素集合使用场景1一个聚集对象(接口或抽象类集合),不管对象是那种子类都要对其进行遍历时,可考虑使用迭代器模式2.需要对一个聚集有原创 2020-08-25 09:09:11 · 80 阅读 · 0 评论 -
结构型模式 05 组合模式
组合模式Composite将对象组合成shuz原创 2020-08-24 16:03:05 · 150 阅读 · 0 评论 -
行为型模式 05 备忘录模式
备忘录模式Memento在不破坏封装性的前提下,捕获一个对象的内部状态,不在该对象之外保存这个状态,这样以后就可以将该对象恢复到原先保存的状态Originator 发起人:记录当前时刻的内部状态,负责创建和恢复备忘录数据,决定要被备份的范围Memento 备忘录:负责存储Originator发起人对象的内部状态,在需要的时候提供发起人需要的内部状态,但防止除发起者以外的人访问备忘录具有两个接口,Caretaker只能使用窄接口,仅能将备忘录传递给其他对象,Originator能使用宽接口,允许他访原创 2020-08-24 08:42:57 · 73 阅读 · 0 评论 -
结构型模式 04 适配器模式
适配器模式 Adapter只说对象适配器,类适配器需要多重继承将一个接口转换成客户希望的另外一个接口,Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作时控制范围之外的一个原油对象与某个接口匹配,来复用一些现存的类,但接口又与复用环境要求不一致的情况Target:客户所期望的接口,可以抽象也可以是具体类Adaper:包装需要适配的对象把原接口转换为目标接口,实现Target,持有Adaptee的引用Adaptee:需要被适配的类Target不知道Adaptee这个类,原创 2020-08-23 22:38:48 · 69 阅读 · 0 评论 -
行为型模式 04 状态模式
状态模式State状态切换当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类当控制一个对象状态转换的条件表达式过于复杂时的情况,把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化把各种判断逻辑分布到State的子类之间,来减少相互间的依赖Context:环境类,持有对State的引用,实际上拥有状态的对象。State:抽象状态类,封装与Contex的一个特定状态的行为ConcreteState 每个类实现了状态具体行为把各种状态及实现封装成一个C原创 2020-08-23 21:35:52 · 133 阅读 · 0 评论 -
创建型模式 04 抽象工厂模式
抽象工厂模式Abstract Factory创建一组相关或相互依赖的对象结构与工厂模式类似,只是产品变成类多个抽象产品实例产品共两个产品等级结构Screen结构public interface Screen { void display();}public class MacScreen implements Screen { @Override public void display() { System.out.println("苹果界面");原创 2020-08-23 15:43:21 · 85 阅读 · 0 评论 -
行为型模式 03 观察者模式
观察者模式(发布-订阅模式)定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,这个主题对象在状态发送变化是,会通知所有的观察者对象:使他们能够自动更新自己一个具体通知者实例对象对应多个具体观察者对象Subject:抽象通知者(被观察者),持有一个观察者对象引用集合。并提供方法,可以增加或删除引用集合中的观察者,另有一个抽象通知方法(一般为抽象类)ConcreteSubject:具体通知者,将有关状态存入具体观察者对象,在ConcreteSubject:储存具体观察者对象状态,当内原创 2020-08-23 13:25:37 · 78 阅读 · 0 评论 -
创造型模式 03 建造者模式
建造者模式Builder将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示Director :用它来控制建造过程,也可用它隔离与建造过程的关联(保证构建顺序)Builder:创建对象各部件的指定接口(对构建过程抽象)ConcreteBuilder:实现Builder,具体实现建造对象的过程,对Product装备,每个建造者都只负责一类具体产品Product:被构建的具体对象。实体类若Product只有一个,可省略Builder,Director,让ConcreteBuil原创 2020-08-22 22:09:42 · 94 阅读 · 0 评论 -
结构型模式 03 外观模式
外观模式 Facade为子系统中的一组接口提供一个一致的界面Facade :知道全部子系统的功能与数学,对其组合,方便调用SubSystem:子系统集合,内部存在一个或多个子系统,子系统不知道Facade的存在。应用:数据库三层架构 DAO,SERVICE,CLIENT使用场景1.设计初期,将不同的层分离2.开发过程中,各个子系统经过不断重构越来越复杂,让调用者来调用很困难,加上Facade,子系统内部操作全部隐藏,给外部使用的暴露出来,减少类之间的依赖,降低耦合3.维护大型系统,此系统难原创 2020-08-22 20:28:03 · 72 阅读 · 0 评论 -
行为型模式 02 模板方法模式
模板方法模式TemplateMethod定义一个操作中算法的骨架,而将一些步骤延迟到子类中 ,模板方法发使得子类可以不改变一个算法的结构即可重新定义带算法的某些特定步骤。模板方法模式通过把不变的行为搬移到超类,去除了子类中的重复代码。把子类中重复出现的方法抽取出来,搬到超类中AbstractClass定义了算法的骨架(可以有具体的实现,一般是抽象类),通过声明抽象方法限制子类以不同的方式来实现这些算法;ConcreClass对算法的具体实现类...原创 2020-08-22 19:07:45 · 70 阅读 · 0 评论 -
创建型模式 02 原型模式
原型模式Prototype即克隆用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象克隆 开辟新空间 不调用构造方法,直接在内存中复制要求实现cloneable接口(标记接口),重写克隆方法java.lang.clone(自动生成的即可),会调用构造方法浅克隆 ,不会克隆类内部非基本类型对象(String型也是浅拷贝),仅仅是复制引用深克隆,会克隆类内部其他类对象,开辟新内存存储,但该类也需实现cloneable和重写clone方法实例警察类:public class Poli原创 2020-08-22 16:36:44 · 82 阅读 · 0 评论 -
结构型模式 02 代理模式
代理模式Proxy为其他对象提供一种代理控制对这个对象的访问,引入了一定程度的间接性RealSubject 被代理角色,Proxy代理角色,持有一个realSubject对象引用实例Subject (接口)public interface GiveGift { void giveFlower(); void giveFood();}RealSubject 被代理者public class RealSubject implements GiveGift{ priv原创 2020-08-22 14:37:33 · 74 阅读 · 0 评论 -
结构型模式 01 装饰者模式
装饰模式Decorator是继承方案的一个替代方案,提供比继承更多的灵活性。在不改变原类文件以及不使用继承的情况下,动态地将功能附加到对象上,从而实现动态拓展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。动态的给对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活Component抽象被装饰者(是个借口)ConcreteComponent是具体被装饰者Decorator是抽象装饰者(是一个抽象类),子类为具体装饰者,每个装饰者都应该有一个实例变量用以保存某原创 2020-08-22 13:38:29 · 111 阅读 · 0 评论 -
行为型模式 01 策略模式
面对对象的编程,并不是类越多越好,类的划分是为了封装,但分类的基础是抽象,具有相同属性和功能的对象的抽象集合才是类把一个类中经常改变或者将来可能改变的部分提取出来,作为一个接口,然后在类中包含这个对象的实例,这样类的实例在运行时就可以随意调用实现了这个接口的类的行为。策略模式(Strategy): 定义算法家族,分别起来,让他们之间可与相互替换,此模式让算法的变化,不会影响到使用算法的客户...原创 2020-08-21 08:56:02 · 130 阅读 · 0 评论 -
创建型模式 01 工厂模式
简单工厂模式具体工厂类:// 计算器简单工厂public class OperationFactory { public static Operation create(String oper){ Operation operation = null; switch (oper){ case "+": operation = new OperationAdd(); break原创 2020-08-20 21:13:39 · 116 阅读 · 0 评论