设计模式
设计模式
smith789
这个作者很懒,什么都没留下…
展开
-
状态模式
定义状态模式运行对象在内部状态改变时,改变它的行为,对象看起来好像修改了它的类。UML特点状态模式和策略模式是双胞胎,出生时才分开。策略模式的算法彼此可以互相替换。状态模式通过改变自身对象内部的状态帮助对象控制自己的行为。状态模式的本质是根据状态分离和选择行为。状态模式会导致类的数目增加。示例对于一个自动售卖糖果的售卖机存在以下的状态图:如果用面向对象的普通解决方法就是为...原创 2020-02-12 14:06:35 · 180 阅读 · 0 评论 -
观察者模式
定义观察者模式定义了对象之间的一对多依赖,这样一来,一个对象改变状态时,它的所有依赖着都会收到通知并更新。UML/** * 目标对象,它知道观察它的观察者,并提供注册和删除观察者的接口 */public abstract class Subject { /** * 用来保存注册的观察者对象 */ protected List<Observer> observe...原创 2020-02-12 10:43:17 · 127 阅读 · 0 评论 -
策略模式
定义定义一系列的算法,把它们一个个封装起来,彼此可以互相替换。UMLpublic interface Strategy { void algorithmInterface();}class ConcreteStrategyA implements Strategy{ @Override public void algorithmInterface() { ...原创 2020-02-11 20:36:34 · 138 阅读 · 0 评论 -
命令模式
定义将一个请求封装成一个对象,从而可以用不同的请求对客户参数化,对请求排队或记录请求日志,以及支持可撤销的操作。UMLpublic interface Command { /** * 执行命令具体的操作 */ void execute();}/** * 具体的命令实现对象 */class ConcreteCommand implements C...原创 2020-02-11 20:02:43 · 133 阅读 · 0 评论 -
模板方法模式
定义定义一个操作中的算法的骨架,将一些步骤延迟到子类。模板方法使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。UMLpublic abstract class AbstractClass { //基本方法 protected abstract void doSomething(); //基本方法 protected abstract void...原创 2020-02-11 16:25:57 · 93 阅读 · 0 评论 -
代理模式
定义为其他对象提供一个代理,以控制对这个对象的访问。UMLpublic interface Subject { public void request();}class RealSubject implements Subject{ @Override public void request() { System.out.println("具体的...原创 2020-02-11 14:48:12 · 138 阅读 · 0 评论 -
享元模式
定义运用共享技术有效的支持大量细粒度的对象。UML/** * Flyweight接口使共享称为可能,但不强制共享,所有有2种实现类。 * */public interface Flyweight { /** * 示例操作:传入外部状态 * @param extrinsicState */ public void operation(String extrinsic...原创 2020-02-11 14:17:32 · 95 阅读 · 0 评论 -
组合模式
定义将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象、组合对象的操作使用保持一致。UMLabstract class Component { abstract void someOperation(); void addChild(Component child){ throw new UnsupportedOperationEx...原创 2020-02-10 17:18:04 · 87 阅读 · 0 评论 -
装饰者模式
定义动态的给一个对象添加一些额外的职责。比用继承生成子类更灵活。不改变原有对象的基础上,将功能附加到对象上。比继承更有弹性。适用场景动态的增加/撤销一个类的功能。优缺点是继承的有力补充,比继承灵活,不改变原有对象,同时扩展功能。通过适用不同装饰类以及这些装饰类的排列组合,可以实现不同的效果。但是会出现更多的代码、类。多层装饰时,会更复杂。UMLpublic abstract ...原创 2020-02-10 15:35:11 · 106 阅读 · 0 评论 -
桥接模式
业务场景(待改造)/** * 消息统一接口 */public interface Message { /** * 发送消息 * @param msg */ void send(String msg);}/** * 站内短消息的方式发送消息 */class CommonMessageSMS implements Message{ ...原创 2020-02-09 21:20:04 · 204 阅读 · 0 评论 -
工厂方法模式
业务场景和简单工厂有点相似。https://blog.csdn.net/smith789/article/details/104236252/** * 课程抽象类 */public abstract class Course {}@Data@AllArgsConstructor/** * 普通课 */class NormalCourse extends Course...原创 2020-02-09 18:00:31 · 113 阅读 · 0 评论 -
外观模式
业务场景教师若想开设一门新课,需要经过以下步骤:1、填写申请表系里审查。2、院长审核。3、教务处审批。public class Teacher { public static void main(String[] args) { Course course = new Course("商务英语"); new Department().audit(c...原创 2020-02-09 17:09:56 · 125 阅读 · 0 评论 -
简单工厂模式
业务场景现有代码结构:@Data@AllArgsConstructor(access = AccessLevel.PUBLIC)@NoArgsConstructor/** * 普通课程 */public class Course { /** * 课程名称 */ private String courseName;}@Data@AllAr...原创 2020-02-09 15:51:54 · 107 阅读 · 0 评论 -
适配器模式
示例适配器模式类似生活中的充电转接口。/** * 如果要支持同时给安卓和苹果设备一起充电,怎么改? */class AndroidUSB { public void charge(){ System.out.println("安卓usb数据线充电"); }}class IphonedUSB { public void charge(){ ...原创 2020-02-07 11:46:45 · 125 阅读 · 0 评论 -
原型模式
定义原型实例指定创建对象的种类,通过拷贝创建新的对象。不需要知道创建细节,不调用构造方法。原型模式的核心是clone()方法。适用场景类的初始化消耗较多资源。new一个对象需要非常繁琐的过程(数据准备、访问权限等)构造函数比较复杂的时候。特点原型模式比直接new对象性能高。当要创建的对象比较复杂的时候,简化了创建对象的过程。但是必须有clone方法,注意深克隆、浅克隆。实现深...原创 2020-02-06 16:18:37 · 116 阅读 · 0 评论 -
工厂模式
简单工厂用一个工厂类负责产品的创建。接收一个参数,输出具体的产品对象。例如一个生产汽车的工厂,可以根据汽车的类型生产公车、卡车等。public abstract class Car { public abstract void produce();}class Bus extends Car { @Override public void produce() {...原创 2020-02-06 14:46:52 · 113 阅读 · 0 评论 -
建造者模式
示例盖房子/** * 盖房项目需求:包含打地基、砌墙、封顶 * 房子有普通房、别墅 */public abstract class AbstractHouse { //打地基 abstract void buildBasic(); // 砌墙 abstract void buildWalls(); //封顶 abstract void ...原创 2020-02-06 00:02:35 · 124 阅读 · 0 评论 -
单例模式
单例模式定义软件系统中,某个类只能存在一个对象实例。使用场景需要频繁创建、销毁的对象。创建对象耗时过多、耗费资源过多。1、饿汉式(静态常量)public class SingletonTest01 { public static void main(String[] args) { //测试 Singleton instance = Singleton.getInstance...原创 2020-01-30 17:15:35 · 110 阅读 · 0 评论 -
设计模式(一)设计原则
设计模式(一)设计原则开闭原则定义:一个软件实体,如类、模块、函数应该对扩展开放,对修改关闭。例如面向抽象编程,而不要面向实现编程。优点:提高软件系统的可复用性、可维护性。依赖倒置原则定义:高层不应该依赖底层模块,二者都应该依赖抽象。要针对接口编程,不要针对实现编程。优点:减少类的耦合性,提高稳定性、代码可读性、可维护性。依赖倒置原则和开闭原则举例:MyBatis在使用Mapper...原创 2020-01-22 22:38:06 · 111 阅读 · 0 评论