设计模式
设计模式
码海拾贝2023
享受技术
展开
-
行为型-中介者模式
目录不使用设计模式使用设计模式小结不使用设计模式public class WithoutMediatorPatternDemo { public static void main(String[] args) { ModuleA moduleA = new ModuleA(); ModuleB moduleB = new ModuleB(); ModuleC moduleC = new ModuleC(); moduleA.execute(); mo原创 2023-03-15 09:31:42 · 822 阅读 · 0 评论 -
行为型-观察者模式
观察者模式一般是和组合模式一起使用, 观察者模式为组合模式的复杂结构提供执行体public class VisitorPatternDemo { public static void main(String[] args) { Department leafDept1 = new Department("叶子部门1"); Department leafDept2 = new Department("叶子部门2"); Department leafDept3 = new Dep...原创 2023-03-15 09:31:39 · 823 阅读 · 0 评论 -
行为型-状态模式
public class StatePatternDemo { public static void main(String[] args) { Context context = new Context(new NewState()); context.execute(1); context.execute(2); context.execute(3); } public interface State { void execute(); } .原创 2023-03-15 09:31:51 · 810 阅读 · 0 评论 -
行为型-备忘录模式
就是中间过程产生的数据保存public class MementoPatternDemo { public static void main(String[] args) { Originator originator = new Originator(); // 准备好了中间数据 originator.prepare(); // 将中间数据保存到备忘录中去 Memento memento = origi...原创 2023-03-15 09:29:39 · 1382 阅读 · 0 评论 -
行为型-命令模式
就是将核心执行逻辑封装成命令,用哪个的时候初始化哪个public class CommandPatternDemo { public static void main(String[] args) { Command commandA = new CommandA(); Command commandB = new CommandB(); Invoker invoker = new Invoker(); invoker.setCommand(commandA);...原创 2023-03-15 09:31:30 · 1534 阅读 · 0 评论 -
行为型-责任链模式
不使用责任链模式public class WithoutChainPatternDemo { public static void main(String[] args) { // 业务流程1 System.out.println("执行功能1"); System.out.println("执行功能2"); System.out.println("执行功能3"); // 业务流程2 System.out.println("执行功能3"); Syst...原创 2023-03-15 09:31:27 · 1012 阅读 · 0 评论 -
行为型-迭代器模式
目录不使用设计模式使用设计模式不使用设计模式public class WithoutIteratorPatternDemo { public static void main(String[] args) { Student student1 = new Student("小明"); Student student2 = new Student("小王"); /*Student[] students = new Student[2]; students[0] =原创 2023-03-15 09:25:36 · 722 阅读 · 0 评论 -
行为型-观察者模式
观察者注册到被观察者上,当观察者发生变动, 去通知观察者(监听者)public class ObserverPatternDemo { public static void main(String[] args) { Subject subject = new Subject(0); Observer observer = new ConcreteObserver(); subject.addObserver(observer); subject.setS...原创 2023-03-15 09:23:36 · 2638 阅读 · 1 评论 -
行为型-模版方法模式
目录不使用模版方法模式可能是这样的使用模版方法模式是这样的总结不使用模版方法模式可能是这样的public class WithoutTempalteMethodPatternDemo { public static void main(String[] args) { DiscountCalculator1 calculator1 = new DiscountCalculator1(); calculator1.calculate(); DiscountCalcu原创 2023-03-15 09:25:24 · 1175 阅读 · 1 评论 -
行为型-策略模式
不使用策略模式可能是这样public class WithoutStrategyPatternDemo { public static void main(String[] args) { int discountStyle = 1; if(discountStyle == 1) { System.out.println("执行优惠计价方式1的复杂业务逻辑"); } else if(discountStyle == 2) { System.out.println...原创 2023-03-15 09:23:14 · 5872 阅读 · 0 评论 -
结构型-享元模式
理念就是,将数据缓存, 使用的时候都使用缓存数据public class FlyweightPatternDemo { public static void main(String[] args) { Flyweight flyweight1 = FlyweightFactory.get("对象1"); flyweight1.execute(); Flyweight flyweight2 = FlyweightFactory.get("对象1"); flyweig...原创 2023-03-15 09:23:08 · 1193 阅读 · 0 评论 -
结构型-组合模式
目录不使用组合模式可能是这样的使用组合模式是这样的不使用组合模式可能是这样的public class WithoutCompositePatternDemo { public static void main(String[] args) { Department leafDept1 = new Department("叶子部门1"); Department leafDept2 = new Department("叶子部门2"); Department leafDept原创 2023-03-15 09:23:03 · 2565 阅读 · 0 评论 -
结构型-桥接模式
public class BridgePatternDemo { public static void main(String[] args) { Implementor implementor = new ConcreteImplementor(); Abstraction abstraction = new RefinedAbstraction(implementor); abstraction.execute(); } public interface Implemento.原创 2023-03-15 09:22:55 · 1230 阅读 · 0 评论 -
结构型-外观模式
目录不使用外观模式可能是这样的使用外观模式是这样的小结不使用外观模式可能是这样的public class WithoutFacadePatternDemo { public static void main(String[] args) { // 假设我们这里是子系统2,要基于子系统1的3个模块的功能实现一个业务逻辑 ModuleA moduleA = new ModuleA(); ModuleB moduleB = new ModuleB(); Module..原创 2023-03-15 09:24:43 · 5859 阅读 · 0 评论 -
适配器,装饰模式,代理模式对比
目录装饰模式:代理模式:适配器模式:装饰模式:原有功能不能满足现有需求,按照开闭原则的思路,我们通过扩展接口来增强功能。可以装饰多层 在一个原有类(a)的基础之上增加了某些新的功能变成另一个类(b)代理模式:通过代理对象来控制访问另一个对象(被代理对象)的方法,不对该方法进行直接操作。 将一个类(a)转换成具体的操作类(b)适配器模式:解决接口不匹配的问题 将一个类(a)通过某种方式转换成另一个类(b)...原创 2023-03-15 09:22:44 · 1264 阅读 · 0 评论 -
结构型-代理模式
package com.bema.demo.bemavery.designpattern.proxy;public class ProxyPatternDemo { public static void main(String[] args) { Subject subject = new ConcreteSubject(); Subject proxy = new Proxy(subject); proxy.request(); } public interface ...原创 2023-03-15 09:22:39 · 6072 阅读 · 0 评论 -
结构型-装饰器模式
装饰器模式强调的是, 持有别人对象, 实现相同的功能, 并且进行增强, 并且能进行多次嵌套装饰public class DecoratorPatternDemo { public static void main(String[] args) { Component component = new ConcreteComponent(); Component decorator = new Decorator(component); decorator.execute(); }原创 2023-03-15 09:24:27 · 1463 阅读 · 0 评论 -
结构型-适配器模式
目录不使用设计模式使用适配器模式小结不使用设计模式可能是这样的public class WithoutAdapterPatternDemo { public static void main(String[] args) { OldInterface oldObject = new OldInterfaceImpl(); NewInterface newObject = new NewInterfaceImpl(); oldObject.oldExecute();原创 2023-03-15 09:24:21 · 992 阅读 · 0 评论 -
创建型-原型模式
不使用原型可能是这样的public class WithoutPrototypePatternDemo { public static void main(String[] args) { // 手头有这么一个对象,需要进行拷贝 Product product = new Product("测试产品", new Component("测试组件")); // 手动来拷贝 Product copyProduct = new Product(product.getNam...原创 2023-03-15 09:24:15 · 1194 阅读 · 3 评论 -
创建型-构建者模式
目录不使用构建者模式传统构建者模式升级版构建者模式不使用构建者模式package com.bema.demo.bemavery.designpattern.builder;public class WithoutBuilderPatternDemo { public static void main(String[] args) { // 构造这个复杂的product对象 Product product = new Product(); // 设置field1属性原创 2023-03-15 09:22:14 · 1757 阅读 · 3 评论 -
创建型-单例模式
饱汉模式(线程不安全)public class UnsafeFullSingletonPatternDemo { public static class Singleton { private static Singleton instance; private Singleton() { } public static Singleton getInstance() { if(instance == null) { instance...原创 2023-03-15 09:21:58 · 1045 阅读 · 1 评论 -
创建型-工厂相关设计模式
目录工厂模式工厂方法模式抽象工厂小结工厂模式没有使用设计模式之前代码可能是这样的public class WithoutFactoryPatternDemo { public static void main(String[] args) { Product product1=new Product("产品1"); System.out.println(product1); } public static class Product { private原创 2023-03-15 09:21:43 · 2052 阅读 · 3 评论 -
设计模式原则
目录单一职责原则里氏替换原则依赖倒置原则接口隔离原则迪米特法则开放封闭原则单一职责原则一个方法 一个类只负责一个职责 降低类和类的耦合,提高可读性,增加可维护性和可拓展性,降低可变性的风险。里氏替换原则使用父类的地方都可以使用其子类替代依赖倒置原则依赖于接口, 不要依赖实现接口隔离原则类和类之间依赖应该建立在最小接口的上。迪米特法则尽可能少的对其他类进行依赖开放封闭原则应该对扩展开放,对修改关闭...原创 2023-03-15 09:23:30 · 1124 阅读 · 0 评论