设计模式
文章平均质量分 85
syxu
这个作者很懒,什么都没留下…
展开
-
访问者模式
访问者模式访问者模式的目的是封装一些施加于某种数据结构元素之上的操作,一旦这些操作需要修改的话,接受这个操作的数据结构可以保持不变。为不同类型的元素提供多种访问操作方式,且可以在不修改原有系统的情况下增加新的操作方式,这就是访问者模式的模式动机。import java.util.ArrayList;import java.util.List;public class Visitor { public static void main(String[] args) { // TODO Aut原创 2020-06-15 21:00:35 · 159 阅读 · 0 评论 -
命令模式
命令模式简介:它将请求发送者,请求接收者解耦,可以让相同的发送者对应不同的接收者。命令模式定义:将一个请求封装成一个对象,从而通过不同的请求将客户端参数化,实现了请求排队,记录请求日志,可撤销操作案例:烧烤摊和烧烤店public class Command { public static void main(String[] args) { // TODO Auto-generated method stub Barbecuer boy =new Barbecuer(); boy.B原创 2020-06-15 20:54:11 · 107 阅读 · 0 评论 -
迭代器模式
迭代器模式迭代器模式(Iterator Pattern):提供一种方法来访问聚合对象,而不用暴露这个对象的内部表示,其别名为游标(Cursor)。迭代器模式是一种对象行为型模式。案例:加薪申请、上报与审批public class Iterator { public static void main(String[] args) { // TODO Auto-generated method stub Manager xz1 =new Manager("小臧1");//三个管理者 Man原创 2020-06-15 18:05:55 · 171 阅读 · 0 评论 -
组合模式
例题:商品类别树+服装+男装-衬衣-夹克+女装-裙子-套装特点:1、有一个根节点2、树枝节点3、叶子结点根节点和树枝节点都可以包含其他节点,统称为容器节点。现在需要管理商品类别树,假设要求能实现输出如上商品类别树的结构功能,应该如何实现?不带模式的解决方案:组合对象import java.util.ArrayList;import java.util.Collection; class Leaf{ private String name=""; public Lea原创 2020-06-08 21:00:23 · 158 阅读 · 0 评论 -
备忘录模式
例题:游戏进度遇到大boss的时候都会保存一下进度:游戏角色的生命力,攻击力,防御力等的数据。如果:打过了就不需要恢复记录,打不过就复原到刚刚保存的记录重新打一遍boss,直到打死为止。class GameRole{ int Vitality;//体力 int Attack;//攻击力 int Defense;//防御力 public int getVitality() { return Vitality; } public void setVitality(int vitality)原创 2020-06-08 20:58:58 · 122 阅读 · 0 评论 -
状态模式
人、事物在不同状态下会有不同表现,而一个状态又会在不同的表现下转移到下一个不同的状态。例题:工作状态的变化上午状态好,中午想睡觉,下午渐恢复,加班苦煎熬。class Work{ private int hour; private Boolean finish=false; public int getHour() { return hour; } public void setHour(int hour) { this.hour = hour; } public Boolean原创 2020-06-08 20:57:18 · 115 阅读 · 0 评论 -
观察者模式
问题引入:办公时间做与工作无关的事情,在老板到来时,前台负责通知好友进入工作状态.import java.util.ArrayList;class Secretary{//前台秘书类 private ArrayList<StockObserver>observers=new ArrayList<StockObserver>(); private String action; public void Attach(StockObserver observer) { obs原创 2020-06-08 20:54:21 · 122 阅读 · 0 评论 -
模板模式
模板模式动机:对于某一项任务,它常常有稳定的整体操作结构,但各个子步骤却有很多改变的需求,或者由于固有的原因,而无法和任务的整体结构同时实现。例题:考试的例子,考试题相同每个人的解答不同定义一个抽象类,将部分逻辑以具体方法以及具体子类实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同子类可以以不同的方式来实现这些抽象方法。class TestPaper{ protected String Answer1() { return ""; } pro原创 2020-05-13 00:19:05 · 107 阅读 · 0 评论 -
策略模式
策略模式动机:在软件构建过程中,某些对象使用的算法可能多种多样,经常改变,如果将这些算法都编码到对象中,将会使对象变得异常复杂,而且有时候支持不使用的算法也是一个性能负担为了在运行时根据需要透明地更改对象的算法,将算法与对象本身解耦,避免上述问题,提出了策略模式。例:商城收银软件public class sheji { public String list=" "; public Double totalPrice=0.00; public void buttonOK()原创 2020-05-12 23:43:00 · 121 阅读 · 0 评论 -
装饰模式
装饰模式(Decorator)动机:在某些情况下我们可能会“过度地使用 继承 来扩展对象的功能”, 由于 继承为类型引入的静态特质,使得这种扩展方式 缺乏灵活性; 并且 随着子类的增多(扩 扩 展功能的增多), 各种子类的组合( 扩展 功能 的组合) 会导致更多 子类的膨胀。为了使“对象功能的 扩展 ”能够根据需要来动态地实现?同时 避免 “ 扩展功能的增多”带来的 子类膨胀问题? 从而使得任何 “功能扩展变化” 所导致的影响降为最低。采用装饰模式。案例:人及其属性人有不同国家,如中国人 、美原创 2020-05-11 16:14:58 · 160 阅读 · 0 评论 -
桥接模式
桥接模式(Bridge)脱耦1、耦合:两个实体的行为的某种强关联。将它们的强关联去掉,就是耦合的解脱,或称脱耦。在这里,脱耦是指将抽象化和实现化之间的耦合解脱开,或者说是将它们之间的强关联改换成弱关联。2、将两个角色之间的继承关系改为聚合关系,就是将它们之间的强关联改换成为弱关联。3、因此,桥接模式中的所谓脱耦,就是指在一个软件系统的抽象化和实现化之间使用组合/聚合关系而不是继承关系,从而...原创 2020-05-01 08:43:35 · 148 阅读 · 0 评论 -
中介者模式
中介者模式(Mediator)动机:在软件构建过程中,经常会出现多个对象互相关联交互的情况,对象之间常常会维持一-种复杂的引用关系,如果遇到一些需求的更改,这种直接的引用关系将面临不断的变化。所以可使用一个“中介对象”来管理对象间的关联关系,避免相互交互的对象之间的紧耦合引用关系。问题引入——联合国沟通世界各国在公司内部,有很多部门,员工,为了完成一定的任务,“同事”,们肯定有许多需要相互...原创 2020-05-01 00:22:11 · 160 阅读 · 0 评论 -
适配器模式
适配器模式(Adapter)在软件系统中,由于应用环境的变化,常常需要将“一些存在的对象” 放在新的环境中应用,但是这些现存对象不满足新环境要求的接口。为了能利用现有对象的良好实现,同时又能满足新的应用环境所要求的接口,采用适配器模式。适配器模式:把一个类的接口变成客户端所期待的另一种接口,从而使原本接口不匹配而无法在一起工作的两个类能够在一起工作。适配器adapter适配者adaptee...原创 2020-04-21 20:16:23 · 156 阅读 · 0 评论 -
外观(门面)模式
外观(门面)模式 (Facade Pattern)定义:为子系统中的一组接口提供一个一致的界面,facaede模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。引入:1病人与医院把医院作为一个子系统,这个系统可以分为挂号,门诊,化验,收费等。病人就如同一个子系统的客户端与另一个子系统的各个类打交道一样,不是一件容易的事情。可以设置一个接待员的位置,由接待员负责代为挂号,收费,取...原创 2020-04-19 22:23:54 · 130 阅读 · 0 评论 -
代理模式
代理模式(Proxy)动机:在面向对象时,有些对象由于某种原因,直接访问会给使用者,或者系统结构带来很多麻烦。增加一层间接层是软件开发中面对不失去透明操作对象的同时来管理/控制这些对象特有的负责性问题常见的解决方法。案例:送花。1 男一给女一送花,送巧克力,送洋娃娃2.男一找男二把花,巧克力和洋娃娃送给女一两种方式,达到的目的是一样的。import java.util.*;cla...原创 2020-04-18 23:14:10 · 104 阅读 · 0 评论 -
享元模式
享元模式(Flyweigh)动机:避免大量细粒度对象问题的同时,让外部客户程序扔能够透明地使用面向对象的方式操作。实例:不同网站具体数据和模板不同,核心代码和数据库共享 class WebSite{ private String name=""; public WebSite(String name) { this.name=name; } public void Use()...原创 2020-04-13 20:26:36 · 261 阅读 · 0 评论 -
单例模式
单例模式(singleton)动机:保证类在系统中只存在一个实例例:配置文件public class AppConfig{ private String parameterA; private String parameterB; public String getParameterA() { return parameterA; } public String getPar...原创 2020-04-12 23:51:45 · 96 阅读 · 0 评论 -
建造者模式
对象创建模式(Builder)案例-建造“小人”import java.util.*;import java.awt.*;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.lang.*;class main extends Frame{ public void pai...原创 2020-04-02 21:55:45 · 93 阅读 · 0 评论 -
原型模式
原型模型(Prototype)通过给出一个原型对象来指明所要创建的对象类型,然后用复制这个原型对象的办法创建出更多的同类型对象。案例-简历问题原代码class Resume{ private String name; private String age; private String sex; private String timeArea; private String c...原创 2020-04-02 20:33:11 · 475 阅读 · 0 评论 -
抽象工厂模式
抽象工厂模式实现从Access换为使用Sqlserver,接着换为Oracleclass User{ private int ID; private String name; public int getID() { return ID; } public void setID(int iD) { ID = iD; } public String getName() {...原创 2020-04-02 17:49:42 · 83 阅读 · 0 评论 -
工厂模式方法
工厂模式方法首先使用简单工厂模式实现一个计算器方法import java.util.Scanner;abstract class operation{ private double numberA=0; private double numberB=0;//两个number属性主要用于计算机的前后数 boolean flag=true; public double getNumb...原创 2020-03-31 23:20:14 · 111 阅读 · 0 评论 -
七大设计原则
设计模式原则就是程序员在编程时,应当遵守的原则,也是各种设计模式的基础(即:设计模式依据什么设计出来)。设计模式常用的七大原则有:1.单一职责原则2.开放封闭原则3.里氏代换原则4.依赖倒转原则5.合成/聚合复用原则6.接口隔离原则7.迪米特法则一.单一职责原则就一个类而言,应该仅有一个引起它变化的原因(职责)单一职责原则对类来说,即一个类应该只负责一项职责。如类A负责两个...原创 2020-03-13 10:56:28 · 234 阅读 · 0 评论 -
UML类图详解
1.注释(comment)注释就是对类图的补充说明,可以附加在任何元素上,用右上角有折角的矩形来表示,其内放置说明文字,通过虚线连接被注释的元素。2.类(Class)在面向对象(OO) 编程中,类是对现实世界中一组具有相同特征的物体的抽象。在UML类图中,类使用包含类名、属性(field) 和方法(method) 且带有分割线的矩形来表示:类的属性的完整表示方式:可见性 名称 :类...原创 2020-03-10 20:30:18 · 4253 阅读 · 0 评论 -
设计模式——UML图
矩形框代表类(class)。类图分三层,第一层显示类的名称,如果是抽象类就用斜体表示。第二层是类的特性,通常就是字段和属性。第三层是类的操作,通常是方法和行为。+表示public -表示private #表示protected继承关系用空心三角形和实线表示实现接口用空心三角形加虚线表示关联关系用实线箭头聚合表示一种弱的“拥有关系”,体现的是A对象可以包含B对象,...原创 2020-03-03 19:52:16 · 181 阅读 · 0 评论