
设计模式
NoloseWind
From zero to hero.
展开
-
设计模式:六大设计原则及三大分类
设计模式分类1.创建型模式(五种):Singleton pattern(单例模式)Factory Method(工厂方法)Abstract Factory(抽象工厂)Builder Pattern(建造者模式)Prototype Pattern(原型模式)2.结构型模式(七种):Facade pattern(门面模式)Decorator Pattern(装饰着模式)Proxy Pattern(代理模式)Adapter Pattern(适配器模式)Bridge Pattern(桥接原创 2021-10-15 10:03:59 · 310 阅读 · 0 评论 -
设计模式:Interpreter Pattern(解释器模式)
设计模式应用场景解释脚本语言,编译器实现方式sql解析,判断简单sql语句的类型 public static String easySQLCheck(String sql){ if (sql.contains("select"))return "查询"; if (sql.contains("update"))return "修改"; if (sql.contains("delete"))return "删除"; if (sql.原创 2021-10-15 09:43:26 · 106 阅读 · 0 评论 -
设计模式:Flyweight Pattern(享元模式)
设计模式应用场景有大量对象相似或相同,需要减少对象的创建实现方式此处以游戏子弹为例1.创建子弹实体类living 代表子弹是否死亡,true代表死亡class Bullet{ public UUID id = UUID.randomUUID(); boolean living = true; @Override public String toString() { return "Bullet{" + "id="原创 2021-10-14 15:18:19 · 812 阅读 · 0 评论 -
设计模式:Observer Pattern(观察者模式)
设计模式应用场景一个对象的改变将导致或者需要导致其他一个或多个对象也发生改变实现方式1.创建实体类参数class ActionEvent { long when; Object source; public ActionEvent(long when, Object source) { this.when = when; this.source = source; }}2.创建监听器接口(监听器即为观察者)interface原创 2021-10-14 11:35:50 · 103 阅读 · 0 评论 -
设计模式:Composite Pattern(组合模式)
设计模式应用场景树形菜单,文件、文件夹的管理实现方式以树形结构为例1.创建节点父类abstract class Node{ abstract void p();}2.创建节点实现根节点和中间节点class BranchNode extends Node{ String name; List<Node> nodes = new ArrayList<>(); public BranchNode(String name){原创 2021-10-14 09:44:53 · 77 阅读 · 0 评论 -
设计模式:Memento Pattern(备忘录模式)
设计模式应用场景需要保存/恢复数据的相关状态,提供一个可回滚的操作实现方式class Hero implements Serializable{ Integer live = 100; public void fight(Boss boss){ live = live-boss.live; }}class Boss{ Integer live = 10000;}测试: public static void main(String[]原创 2021-10-14 08:50:33 · 97 阅读 · 0 评论 -
设计模式:Template Pattern(模板方法模式)
设计模式应用场景有多个子类共有的方法,且逻辑相同复杂的方法,可以将它们模板化处理实现方式由抽象类指定逻辑骨架,子类做具体实现abstract class A{ public void m(){ m1(); m2(); } abstract void m1(); abstract void m2();}class B extends A{ @Override void m1() { Syste原创 2021-10-13 15:27:10 · 106 阅读 · 0 评论 -
设计模式:Prototype Pattern(原型模式)
设计模式应用场景创建复杂对象的原型,通过拷贝这些原型创建新的对象实现方式原型类实现Cloneable接口,重写Object中的clone()方法1.浅克隆class Person implements Cloneable{ String id; Integer age; boolean type; Location location = new Location(); @Override protected Object clone(){原创 2021-10-13 12:02:40 · 83 阅读 · 0 评论 -
设计模式:State Pattern(状态模式)
设计模式应用场景对象在内部的状态发生改变时,发生或改变对应的行为,根据状态决定动作实现方式接口定义好不同状态下会改变或者要执行的动作方法,在状态的类中实现接口方法,根据状态类型的不同,做出不同的实现代码实现:1.定义状态接口interface CarState{ void openDoor();}2.定义状态,实现不同状态下的方法class RunCarState implements CarState{ @Override public void openDo原创 2021-10-12 15:32:08 · 93 阅读 · 0 评论 -
设计模式:Command Pattern(命令模式)
设计模式应用场景认为是命令的地方都可以使用命令模式注意事项:命令模式需要有恢复操作实现方式将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化。代码实现:1.创建命令抽象类运行和撤回方法public abstract class Command { public abstract void run(); public abstract void undo();}2.创建数据public class Content { String msg =原创 2021-09-24 19:16:06 · 208 阅读 · 0 评论 -
设计模式:Bridge Pattern(桥接模式)
设计模式应用场景双维度扩展,一个类存在两个独立变化的维度,且这两个维度都需要进行扩展。实现方式抽象类聚合接口,分离抽象和实现,使它们都可以独立的变化。代码实现:1.定义桥接接口interface Calculation{ void method(int x,int y);}2.接口实现class A implements Calculation{ @Override public void method(int x, int y) { Syst原创 2021-09-24 17:55:09 · 100 阅读 · 0 评论 -
设计模式:Adapter Pattern(适配器模式)
设计模式应用场景修改一个正常运行的系统的接口,应该考虑使用适配器模式。实现方式将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。例如,以下是系统内部已经存在的代码abstract class PlayObject{ abstract void goOne(); abstract void goTwo(); abstract void goThree(); abstract void goFour();原创 2021-09-24 16:20:02 · 362 阅读 · 0 评论 -
设计模式:Builder Pattern(建造者模式)
设计模式应用场景需要生成的对象内部结构十分复杂,构造时需要传递很多参数实现方式将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。代码实现:class Location { String street; String roomNo; public Location(String street, String roomNo) { this.street = street; this.roomNo = roomNo;原创 2021-09-24 15:15:31 · 88 阅读 · 0 评论 -
设计模式:Visitor Pattern(访问者模式)
设计模式应用场景需要对一个对象结构中的对象进行很多不同的并且不相关的操作,而需要避免让这些操作"污染"这些对象的类,也不希望在增加新操作时修改这些类。实现方式将数据结构与数据操作分离,此处我们以电脑和消费者为例1.创建访问者接口两个方法分别表示获取CPU和内存的折扣力度interface Visitors{ double getCUPDiscounts(); double getMemoryDiscounts();}2.创建两位访问者代表不同角色class OneVis原创 2021-09-24 09:40:59 · 100 阅读 · 0 评论 -
设计模式:Iterator Pattern(迭代器模式) 手写简单实现Iterator Collection ArrayList LinkedList
设计模式应用场景需要设计的类可以动态扩展和删除一些功能实现方式原创 2021-09-23 20:20:32 · 133 阅读 · 0 评论 -
设计模式:Proxy Pattern(代理模式) 静态代理 JDK动态代理
设计模式应用场景需要设计的类可以动态扩展和删除一些功能实现方式给职责定义一个接口类型,动态给一个类添加职责,这个职责可以在类构建的时候传入,也可以在类生成后传入原创 2021-09-23 10:27:47 · 90 阅读 · 0 评论 -
设计模式:Decorator Pattern(装饰着模式) IO流装饰器
设计模式应用场景需要设计的类可以动态扩展和删除一些功能实现方式给职责定义一个接口类型,动态给一个类添加职责,这个职责可以在类构建的时候传入,也可以在类生成后传入代码实现1.创建抽象类,定义装饰方法abstract class DecoratorObject{ //装饰方法 abstract void decorator();}2.创建装饰器父类,定义编写装饰器构建需要的参数abstract class TestDecorator extends DecoratorObje原创 2021-09-15 12:32:26 · 126 阅读 · 0 评论 -
设计模式:Chain of Responsibility Pattern(责任链模式)
设计模式应用场景当方法或请求之间传输的数据需要进行多重筛选和过滤时,可以给他们之间加一个责任链,每个链条负责不同的责任,并决定是否继续执行实现方式避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止代码实现:此处我们模仿Request和Response的请求过滤public class Main { public static void main(String[] args) { Filter原创 2021-09-15 10:03:58 · 85 阅读 · 0 评论 -
设计模式:Mediator Pattern(调停者模式)
设计模式应用场景当对象之间的关系特别复杂时,完成一个业务势必要访问多个对象,那么我们可以定制一个门面来管理这些关系,使得业务简单化实现方式原创 2021-09-14 19:25:06 · 188 阅读 · 0 评论 -
设计模式:Facade Pattern(门面模式)
设计模式应用场景当对象之间的关系特别复杂时,完成一个业务势必要访问多个对象,那么我们可以定制一个门面来管理这些关系,使得业务简单化实现方式为子系统中的一组接口提供一个一致的门面,门面模式定义一个高层接口,这个接口使得这一子系统更加容易使用。代码示例:1.我们先设计三个简单的类和方法class A { public void a1(){ System.out.println("a1"); } public void a2(){ System.原创 2021-09-10 19:34:05 · 149 阅读 · 0 评论 -
设计模式:Abstract Factory Pattern(抽象工厂模式)
设计模式应用场景代码编写中,需要使 “创建对象” 和 “使用对象” 两个动作分离意图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。可以理解为工厂的工厂,使用工厂方法将多种对象类型归为一个族,把这个族抽象成一个工厂当其他对象实现了族中的抽象类型后,就可以通过这个抽象工厂去生产不同的族缺点是不方便添加族中的成员实现方式1.设计抽象工厂中的类型比如可以把 移动工具,食物 归为两个大类动作可以用接口,具体事物可以用抽象类,本质一样移动工具public interfac原创 2021-09-09 09:27:26 · 131 阅读 · 0 评论 -
设计模式:Factory Method Pattern(工厂方法模式)
设计模式应用场景做一件事情,对某些对象或数据进行操作的时候,用不同的方式执行,从而得到不同的结果实现方式抽象策略类:定义所有支持的算法(策略)的公共接口。具体策略类:实现抽象策略类接口,以实现具体算法(策略)。...原创 2021-09-08 20:33:29 · 122 阅读 · 0 评论 -
设计模式:Strategy Pattern(策略模式) Collections.sort 策略排序
设计模式应用场景做一件事情,对某些对象或数据进行操作的时候,用不同的方式执行,从而得到不同的结果实现方式抽象策略类: 定义所有支持的算法(策略)的公共接口。具体策略类: 实现抽象策略类接口,以实现具体算法(策略)。当抽象策略和具体策略写好后,可以把抽象策略定义为函数的参数,传参时可以根据情况的不同,选择不同的具体策略作为参数传入那么之后进行扩展,只需要写不同的具体策略即可,不用改主业务逻辑代码示例:public class Alg { //抽象策略类 interfa原创 2021-09-08 11:20:05 · 244 阅读 · 0 评论 -
设计模式:Singleton pattern(单例模式) 懒汉式 饿汉式 双重校验锁 静态内部类 枚举法
设计模式应用场景只需要存在一个实例实现方式1.饿汉式类加载到内存后,就实例化一个单例,JVM保证线程安全public class M1 { private static final M1 INSTANCE = new M1(); private M1(){} public static M1 getInstance(){ return INSTANCE; } public static void main(String[] args原创 2021-09-07 17:43:12 · 185 阅读 · 0 评论