![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
文章平均质量分 79
WENWENlll
qq
展开
-
【设计模式】命令模式的实现--------Java
命令模式又称行动模式或交易模式。属于“行为变化模式”:组件的构建过程中,组件行为的变化常导致组件本身的变化,“x行为变化”模式将行为和组件行为本身解耦。动机:将“行为请求者”与“行为实现者”解耦。1.问题引入:(烧烤摊)客户是“行为的请求者”,烤摊老板是“行为的实现者”,两者耦合性很高。public class Test { public static void main(String[] args) { Barbecuer boy=new Barbecuer(); boy.ba原创 2020-06-04 17:16:10 · 224 阅读 · 0 评论 -
【设计模式】职责链模式--------Java
属于“数据结构”模式。动机:一个请求可能被多个对象中的一个处理处理,运行时只能有一个接收者。为解决请求发送者与接收者之间的紧耦合,使多个对象都有机会处理请求,将这些对象连成一条链,并沿着这链传递请求,直到有一个对象处理它为止。1.问题引入:(员工的加薪申请的审批)public class Test { public static void main(String[] args) { //三个管理者 Manager jingli=new Manager("刘刘"); Manager zon原创 2020-06-04 17:13:50 · 135 阅读 · 0 评论 -
【设计模式】迭代器模式
迭代器(Iterator)模式属于数据结构模式。迭代器模式提供一种遍历集合元素的统一接口,用一致的方法遍历集合元素,不需要知道集合对象的底层表示,即不暴露内部的结构。提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。最简单的如:.Net中的foreach inJava中的for(Leaf leaf:childLeaf){…}在组合模式中,通常可以使用迭代器模式来遍历组合对象的子对象集合,而无需关心具体存放子对象的聚合结构。...原创 2020-06-04 17:11:16 · 120 阅读 · 0 评论 -
【设计模式】组合模式的实现--------Java
组合(Composite)模式“数据结构”模式:常有一些组件在内部具有特定的数据结构,如果让客户程序依赖这些特定的数据结构,会破坏组件的复用性。这时,将这些特定的数据结构封装在内部,在外部提供统一的接口,来实现与特定数据结构无关的访问。动机:将客户代码与复杂的对象容器结构解耦组合模式的目的:不区分组合对象还是叶子对象,而是以一种统一的方式操作。1.场景问题:(商品类别树)包括:根节点、树枝节点、叶子节点其中,根节点与树枝节点类似,都包含其他节点,成为容器节点。package computer;原创 2020-06-02 23:20:03 · 256 阅读 · 0 评论 -
【设计模式】备忘录模式的实现--------Java
备忘录(Memento)模式动机:实现回溯到之前处于某个点时的状态,又不破坏对象本身的封装性。备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可以利用该保存的状态实施恢复操作。1.引例:(游戏进度保存与回复)package computer;public class Test { public static void main(String[] args) { GameRole g=new GameRole(); g.setInitSt原创 2020-06-02 23:17:39 · 200 阅读 · 0 评论 -
【设计模式】状态(State)模式的实现与应用--------Java
状态(State)模式根据对象的状态来更改对象的行为,而不会紧耦合状态和操作。1.问题引入(不同时段工作状态的变化)用switch-case语句以及if语句:难维护、状态和动作紧耦合、拓展性和可维护性差。package computer;public class Test { public static void main(String[] args) { //工作 Work work=new Work(); //设置时间为9点并输出九点的状态 work.setHour(原创 2020-05-28 23:17:10 · 268 阅读 · 0 评论 -
【设计模式】观察者模式的实现及Java中的观察者模式--------Java
观察者模式(Observer):一种通知依赖关系:一个对象的状态发生改变,所有的依赖对象(观察者对象)都将得到通知。这种依赖关系过于紧密,为了将这种依赖关系弱化,松耦合,有了观察者模式。1.问题引入:同事上班炒股票,老板回来的时候前台通知同事停止。package computer;import java.util.ArrayList;public class Test { public static void main(String[] args) { //前台童子喆 Secre原创 2020-05-28 15:24:46 · 167 阅读 · 0 评论 -
【设计模式】模板方法模式的实现--------java
模板方法模式:父类中定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。动机:对于某一项任务,整体的操作步骤顺序固定,但具体步骤的内容有所不同时。1.问题引入:标准化考试:实现考试题相同,每个人的解答不同。package computer;public class Test { public static void main(String[] args) { System.out.println("学生A答的试卷:"); //子类变量的声明改成父类,利用多态性,实现代码重用 T原创 2020-05-12 23:43:28 · 220 阅读 · 0 评论 -
【设计模式】策略模式的实现--------java
策略模式(Strategy Pattern)什么时候用策略模式:一个系统需要动态地在几种算法中方选择一种时。1.银行收银软件(由单价、数量,向客户收费)package computer;import java.util.Scanner;public class Test { public static void main(String[] args) { Cash cash = new Cash(); boolean flag = true; while (flag) {原创 2020-05-12 23:40:55 · 156 阅读 · 0 评论 -
【设计模式】桥接模式的实现--------java
桥接模式(Bridge)1.问题引入:关于手机品牌与手机软件的两种结构:问题:再添加新的手机品牌或者新的软件类型都会非常麻烦。这时候需要用到合成/聚合原则:优先使用合成/聚合,而不是类的继承。问题的解决:手机品牌和手机软件之间的关系是手机品牌包含手机软件,但软件并不是品牌的一部分,所以他们之间是聚合关系,而不是合成关系。package computer;public cla...原创 2020-05-03 12:13:46 · 178 阅读 · 0 评论 -
【设计模式】中介者模式的实现--------java
中介者模式(Mediator)对象之间的互相调用通过中介者来进行,降低系统的复杂性能,松耦合。1.以同事之间的通讯为例:package computer;public class Test { public static void main(String[] args) { //中介者 ConcreteMediator m=new ConcreteMediator(); ...原创 2020-05-02 15:47:37 · 165 阅读 · 0 评论 -
【设计模式】适配器模式的实现--------java
适配器模式:把一个类的接口变成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。动机:将一些现存的对象放在新的环境中时,即利用现有对象的良好实现,又能满足新的应用环境所要求的接口。有两种适配器模式:类适配器模式:适配器与适配者之间是继承(或实现)关系。对象适配器模式:适配器与适配者之间是关联关系。1.对象适配器模式:客户端要调用的是request...原创 2020-04-21 22:57:26 · 133 阅读 · 0 评论 -
【设计模式】外观模式的实现--------java
外观(门面)模式:为子系统中的一组接口提供一个一致的界面,即一个高层接口,这个接口使这一子系统更加容易使用。客户端与子系统的内部复杂性分开,客户端只需要与外观对象打交道即可。动机:简化外部客户程序和系统间的交互接口。1.引例:买股票与买基金:众多投资者与众多的股票的联系很多,而基金则是基金经理人在与上千股票和其他投资产品打交道。基金为例:package computer;publ...原创 2020-04-21 22:28:07 · 125 阅读 · 0 评论 -
【设计模式】代理模式的实现--------java
代理模式1.引例:卓贾易直接追娇娇package computer;public class Test { public static void main(String[] args) { SchoolGirl jiaojiao=new SchoolGirl(); jiaojiao.setName("李娇娇"); Pursuit zhuojiayi=new Pursu...原创 2020-04-21 21:47:53 · 124 阅读 · 0 评论 -
【设计模式】享元模式的实现--------java
享元模式(Flyweight):为什么需要享元模式:软件系统采用纯粹对象方案的问题在于大量细粒度的对象充斥在系统中,而享元模式可以在避免大量细粒度对象对象的问题的同时,让外部客户程序仍然能够透明的使用面向对象的方式来进行操作。1.问题引入:(多个用户使用同样的网站,但要求不同,有的博客形式有的产品展示形式)package computer;public class Test { pub...原创 2020-04-17 23:51:17 · 127 阅读 · 0 评论 -
【设计模式】单例模式的实现--------java
单例模式:一个类只有一个实例,并提供一个访问它的全局访问点。应用场景:创建一个唯一的变量(对象)。1.场景问题:(读取配置文件到内存)文件名:AppConfig.properties内容:paramA=aparamB=bpackage computer;import java.io.IOException;import java.io.InputStream;import j...原创 2020-04-14 21:59:27 · 381 阅读 · 0 评论 -
【设计模式】建造者模式--------java
建造者模式:建造者模式将一个复杂对象的构建与它的表示分离,可以使一个建造过程生成具有不同内部表示的产品对象。用户不需要知道具体建造的过程和细节,只需要指定建造的类型就可以得到它们。什么情况适用建造者模式:产品都必须由基本的几个零件组成缺一不可,但其他零件不固定时。产品的组装有一定顺序,不可写错顺序时。本质:分离整体构建算法和部件构造算法。1.问题引入:(建造小人)1)建造一个瘦小人pa...原创 2020-04-10 15:13:02 · 153 阅读 · 0 评论 -
【设计模式】原型模式--------java
原型模式:1.问题引入:(简历)public class Test { public static void main(String[] args) { Resume a=new Resume("大鸟"); a.setPersonnalInfo("男", "29"); a.setWorkExperience("1998-2000","XX公司"); Resume b=n...原创 2020-04-09 19:12:08 · 160 阅读 · 0 评论 -
【设计模式】抽象工厂模式--------java
工厂方法模式的问题:一个具体工厂只能创建一类产品。1.初始代码:package computer;import java.util.Scanner;public class Test { public static void main(String[] args) { Scanner cin = new Scanner(System.in); User user =new U...原创 2020-04-07 16:41:12 · 237 阅读 · 1 评论 -
【设计模式】简单工厂、工厂方法模式的实现--------java
导入:1.简单工厂模式增加一个一个运算时:import java.util.Scanner;public class Test { public static void main(String[] args) { Scanner cin = new Scanner(System.in); Operation oper; System.out.print("请输入数字A:");...原创 2020-04-07 15:22:03 · 162 阅读 · 0 评论 -
【设计模式】UML类图样例--------processon作图
原创 2020-03-03 20:14:54 · 324 阅读 · 0 评论 -
【设计模式】UML类图介绍
UML类图简介一、注释注释(comment)注释就是对类图的补充说明,可以附加在任何元素上,用右上角有折角的矩形来表示,其内放置说明文字,通过虚线连接被注释的元素。(如下图)二、类类(Class)在面向对象(OO) 编程中,类是对现实世界中一组具有相同特征的物体的抽象。在UML类图中,类使用包含类名、属性(field) 和方法(method) 且带有分割线的矩形来表示:类的属性的完...原创 2020-03-10 21:00:46 · 1767 阅读 · 0 评论 -
【设计模式】简单工厂模式的实现--------java
一.简单工厂模式:1.初始代码:public class Test { public static void main(String[] args) { Scanner cin = new Scanner(System.in); System.out.print("请输入数字A:"); String A = cin.next(); System.out.print("请选择运...原创 2020-03-31 22:31:33 · 113 阅读 · 0 评论