设计模式
不试一下怎么知道
傻不愣登的编程小白
展开
-
模板方法模式
模板方法模式:定义一个操作中算法的骨架,而将一些步骤延迟到子类中。该模式使得子类可以不改变一个算法的结构即可重新定义该算法的特定步骤。AbstractClass定义了一个模板方法(TemplateMethod),即算法的骨架,其中包括算法PrimitiveOperation的实施,而在具体实现子类将重定义来实现每一个算法的步骤ConcreteClass实现了PrimitiveOperation来完成算法中的特定步骤当子类出现重复的单一行为时,可用模板方法模式将重复动作搬移到父类中。...原创 2021-07-28 23:35:28 · 64 阅读 · 0 评论 -
原型模式
理解原型模式:用原型实例指定创建对象的种类,并通过拷贝这些原型,创建新的对象。UML图如下:尽量减少初始化,其所花费的时间非常浪费。使用克隆方式就可只初始化一次,而修改需修改的地方,保留其余部分。深复制&浅复制深复制:复制引用对象和值浅复制:复制引用和值,引用对象的值不会被引用...原创 2021-07-12 23:40:51 · 64 阅读 · 0 评论 -
工厂方法模式
理解工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。UML图如下:以计算器程序为例,在简单工厂模式中,在原有的运算上再加一个幂运算的话,需在工厂类中添加一个case语句,改变了原有的代码结构,违背了开放-封闭原则。于是把原来工厂中的case语句也拆开成子类继承原工厂类,就可以实现添加或删除模块而不影响原有代码,即符合了开放-封闭原则。但是这样一来,判断的重担又集中在了客户端代码上了。...原创 2021-07-08 23:12:59 · 65 阅读 · 0 评论 -
代理模式
理解代理模式:为其他对象提供代理以控制对该对象的访问。UML原理图如下所示:如图所示,真正的请求实体RealSubject和代理Proxy公用接口subject,使得代理在任何时候都能代替真正的请求实体。而客户端不需要了解以上原理,只需要在使用到请求实体时,调用代理即可。应用场景远程代理:为对象在不同的地址提供代表。虚拟代理:根据需要创建开销很大的对象,通过代理来存放需要实例化很久的对象,如打开网页时,文字会很快下载好,但是大图片会随着页面滚动一张张加载,在其加载完成之前,会用一个显示未原创 2021-07-04 22:30:37 · 51 阅读 · 0 评论 -
装饰模式
模式理解装饰模式:动态地给一个对象添加一些额外的职责就增加功能而言,装饰模式比生成子类更加灵活。例:给人一层一层穿衣服的实现// 人类public class Person { private String name; public Person() { } public Person(String name) { this.name = name; } public void show(){ System.原创 2021-07-04 21:43:05 · 63 阅读 · 0 评论 -
依赖倒转原则
理解依赖倒转原则:高层模块不应该依赖低层模块,两者都应该依赖抽象;抽象不应该依赖与细节,细节应该依赖抽象。简单地理解为面向接口编程而非面向实现编程。高层模块依赖低层模块即将常用函数封装至程序库,开发项目直接调用的过程。在这个过程中,高层和低层模块是绑定的(高耦合),如果有同样的高层模块需求却不想用绑定的低层模块会很复杂。而面向接口编程,除了可自选接口外,还能在原有接口的基础上,根据新的需求,添加新的特性,这都依赖于里氏代换原则。里氏代换原则:子类型必须能替换掉其父类型。在软件中,把所原创 2021-07-03 12:18:32 · 77 阅读 · 0 评论 -
单一职责原则 & 开放-封闭原则
单一职责原则单一职责原则:一个类应仅有一个引起其变化的原因。当一个类会被很多因素改变时,应考虑分解其功能。例如俄罗斯方块中的游戏逻辑和开始计时等功能分开会使每个类内聚程度更高。开放-封闭原则开放-封闭原则:软件实体(类、模块、函数等)可以扩展却不能修改。例如,当很多公司员工准时上班成为难事时,可以考虑设计弹性工作制度,可以稍微晚到,但要保证每天工作8小时。这就是对总体工作时间或业绩的关闭,对上班时间的开放。运用到实际:当因为新需求更改代码时,可及时预想到未来某个新需求对这段代码还会造成修原创 2021-06-29 23:10:18 · 121 阅读 · 0 评论 -
策略模式+简单工厂模式
如果要设计一个商场收银系统,同时具备原价、打8折、满300减100的优惠,如何设计?简单工厂模式使用简单工厂模式确实可以比较优美地解决当下问题。// 工厂类public class CashFactory { public Cash getRealCash(String keyword) { switch (keyword) { case "原价": return new CashNormal();原创 2021-06-28 23:25:56 · 290 阅读 · 0 评论 -
简单工厂模式
面向对象编程优点可维护:可在不影响别的模块的情况下修改只想改的地方可复用:可以在别处被调用可扩展:可在不影响别的模块的情况下添加灵活性好:当需求有轻微改动时,可满足需求如何实现以上优点?封装:将有相似功能的程序封装在一个方法、类中;例如,在计算器小程序中,将加减乘除封装在一个类中,将接收用户输入的模块封装在另一个类中继承:多态:...原创 2021-06-27 22:01:52 · 78 阅读 · 0 评论