
设计模式
设计模式相关
触初
这个作者很懒,什么都没留下…
展开
-
六大设计原则
可维护性 (修改功能,需要改动的地方越少,可维护性就越好) 可复用性 (代码可以被以后重复使用(自己写的类库)) 可扩展性 (添加功能无需修改原来代码) 灵活性 (代码接口可以灵活调用) 单一职责原则 (高内聚,低耦合) 开闭原则 (对扩展开放,对修改关闭(尽量不修改原来代码的情况下进行扩展)) (抽象化,多态是开闭原则的关键(扩展子类)) 里氏替换原则 (所有使用父类的地方,必须能够透明的使用子类对象(不需要修改其他代码)) 依赖倒置原则 (依赖抽象,而不是依赖具体(面向接口编程)) 接口隔离原则 (每原创 2021-07-10 01:55:51 · 145 阅读 · 0 评论 -
Java设计模式:状态模式
根据状态决定行为 (有限状态机(FSM)) 代码结构 源码 package com.myspringboot.shejimoshi.zhuangtai.mianhua; public class Main { public static void main(String[] args) { Shoes shoes1 = new Shoes(100, 200, new ShoesDismalState()); shoes1.discount(); s原创 2021-04-21 02:09:18 · 223 阅读 · 1 评论 -
Java设计模式:模板方法
钩子函数 (多态的标准体现,父类引用指向子类对象,调用方法时,会自动调用子类重写的方法) 代码结构 源码 package com.myspringboot.shejimoshi.muban; public class Dog extends Pet { @Override public void call() { System.out.println("汪汪汪。。。"); } @Override void eat() { Syst原创 2021-04-20 02:04:13 · 221 阅读 · 0 评论 -
Java设计模式:备忘录模式
记录状态,便于回滚 (记录快照,瞬时状态、存盘) (和命令模式的区别在于,命令模式需要一步一步的回滚;而备忘录模式可以跳过中间的过程,一直回滚到快照的版本) (对象序列化) 代码结构 源码 package com.myspringboot.shejimoshi.beiwanglu; import java.io.*; import java.util.HashMap; public class Main { public static void main(String[] args) {原创 2021-04-19 01:24:41 · 269 阅读 · 1 评论 -
Java设计模式:原型模式
clone方法 (实现标记型接口Cloneable(接口中没有自己的方法),没有实现的话,运行时会报异常) 内存地址的直接拷贝(浅克隆)非String的引用类型此时还指向的是同一个对象(同一个内存地址) 代码结构 源码 package com.myspringboot.shejimoshi.yuanxing; class Location implements Cloneable { String street; int roomNo; @Override public原创 2021-04-18 03:17:27 · 314 阅读 · 1 评论 -
Java设计模式:命令模式
封装命令 代码结构 源码 package com.myspringboot.shejimoshi.mingling; public abstract class Command { public abstract void todo(); public abstract void undo(); } package com.myspringboot.shejimoshi.mingling; public class Content { String msg = "hello原创 2021-04-17 22:15:36 · 207 阅读 · 1 评论 -
Java设计模式:桥接模式
双维度扩展 代码结构 源码 package com.myspringboot.shejimoshi.qiaojie; public class Book extends GiftImpl { public void out(){ System.out.println("Book!"); } } package com.myspringboot.shejimoshi.qiaojie; public class Flower extends GiftImpl {原创 2021-04-16 01:44:10 · 256 阅读 · 0 评论 -
Java设计模式:适配器模式
结构转换器(和装饰器模式很像) 代码结构 源码 package com.myspringboot.shejimoshi.shipeiqi; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.InputStreamReader; public class Main { public static void main(String[] args) { try (FileInpu原创 2021-04-15 01:07:24 · 188 阅读 · 0 评论 -
Java设计模式:构建者模式
构建复杂对象 代码结构 源码 package com.myspringboot.shejimoshi.goujianzhe; public class Main { public static void main(String[] args) { Person person = new Person.PersonBuilder() .basicInfo(1, "zhangsan", 18) .score(20)原创 2021-04-14 01:58:28 · 284 阅读 · 0 评论 -
Java设计模式:访问者模式
在结构不变的情况下动态改变对于内部元素的动作 适合于结构固定,编译器 代码结构 源码 package com.myspringboot.shejimoshi.fangwenzhe; public class Board extends ComputerPart { @Override void accept(Visitor v) { v.visitBoard(this); } @Override double getPrice() {原创 2021-04-13 00:58:57 · 199 阅读 · 1 评论 -
Java设计模式:迭代器模式
对不同容器中的数据提供了一套统一的遍历方式 jdk中容器就是这么实现的,请直接查看jdk源码 代码结构 源码(test) package com.myspringboot.shejimoshi.diedaiqi; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; /** * jdk中容器的Iterator */ public class Main { public sta原创 2021-04-12 23:38:04 · 174 阅读 · 0 评论 -
Java设计模式:代理模式
静态代理 代码结构 源码 package com.myspringboot.shejimoshi.daili.jingtai; public interface Call { void call(); } package com.myspringboot.shejimoshi.daili.jingtai; import java.util.concurrent.TimeUnit; public class Dog implements Call { public void cal原创 2021-04-11 23:54:24 · 201 阅读 · 1 评论 -
Java设计模式:享元模式
重复利用对象,常与组合模式共用,组成复杂模块 (Word文档,String,游戏地图坐标) 代码结构 源码 package com.myspringboot.shejimoshi.xiangyuan; public class StringTest { public static void main(String[] args) { // 字符串常量池 String s1 = "a"; String s2 = "a"; String原创 2021-04-10 22:57:51 · 188 阅读 · 0 评论 -
Java设计模式:组合模式
树状结构专用模式,一对多中,又可以嵌套一对多 (文件夹、文件) 代码结构 源码 package com.myspringboot.shejimoshi.zuhe; import java.util.ArrayList; import java.util.List; public class BranchNode extends Node { List<Node> nodes = new ArrayList<Node>(); public BranchNode(原创 2021-04-09 01:33:21 · 211 阅读 · 2 评论 -
Java设计模式:观察者模式
Observer、Listener、Hook、Callback这些本质都是观察者模式 一个事件可以被多个方法观察,一个方法可以观察多个事件,为了进行区分因此又引入了事件类这个样一个参数。 代码结构 源码 package com.myspringboot.shejimoshi.guanchazhe; import java.util.ArrayList; import java.util.List; public class Child { private List<Observer&g原创 2021-04-08 01:25:06 · 243 阅读 · 2 评论 -
Java设计模式:责任链模式
简单问题复杂化 封装变化 和构造者模式的写法有些类似 一个方法专注干一件事 由一系列方法串起来完成最终的功能 代码结构 源码 package com.myspringboot.shejimoshi.zerenlian.zhixian; import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) { WangBa wang原创 2021-04-06 23:53:24 · 188 阅读 · 0 评论 -
Java设计模式:装饰器模式
增强功能:不改变原有功能实现,灵活的添加新的功能 输入输出流的一套包装类,就是装饰器。 代码结构 源码 package com.myspringboot.shejimoshi.zhuangshiqi; import java.io.*; public class Main { public static void main(String[] args) { File file = new File("D:\\javatest\\1.txt"); try (Fil原创 2021-04-02 02:20:48 · 239 阅读 · 0 评论 -
Java设计模式:工厂方法的4种实现
任何可以产生对象的方法或类,都可以称之为工厂 公共代码结构 源码 package com.myspringboot.shejimoshi.gongchang.common; public class Cat implements Pet { public void call() { System.out.println("喵喵喵。。。"); } } package com.myspringboot.shejimoshi.gongchang.common; public原创 2021-04-01 01:59:17 · 331 阅读 · 1 评论 -
Java设计模式:策略模式
通过自定义的方式,完成一件事。 参考JDK源码中的Comparator接口,自定义MyComparator接口,以及编写排序算法,通过实现不同的比较器(MyComparator接口的实现类),完成自定义排序功能。 这就是策略模式的一种简单实现。 代码结构 源码 package com.myspringboot.shejimoshi.celue; import java.util.Arrays; public class Main { public static void main(String原创 2021-03-31 01:49:22 · 227 阅读 · 2 评论 -
Java设计模式:单例模式的7种实现
全局只有一个实例对象: 1, 私有构造方法, 2, 提供一个访问实例好了对象的方法 这里只是列举了单例模式的几种写法(演进) 代码结构 源码 package com.myspringboot.shejimoshi.danli; /** * 饿汉式 * 类加载到内存后,就实例化一个单例,JVM保证线程安全 * 简单实用,推荐使用! * 唯一缺点:不管用到与否,类装载时就完成实例化(网上有看到说多类加载器时,会破坏【暂未想明白】 */ public class EHan { private原创 2021-03-30 02:07:45 · 437 阅读 · 4 评论