![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
johnjoe.xie
物来顺应,未来不迎,当时不杂,既过不恋。--曾国藩
展开
-
《设计模式》SOLID原则
S: 单一责任原则(Single Responsibility Principle,SRP)一个类有且仅有一个职责O:开放封闭原则(Open Closed Principle,OCP)对扩展开放,对修改闭合L:里式替换原则(Liskov Substitution Principle,LSP)任何基类可以出现的地方,子类一定可以出现I:接口分离原则(Interface Segregati...原创 2019-03-29 23:22:01 · 195 阅读 · 0 评论 -
《设计模式》7.适配器模式(结构型)
作用将已知类的接口通过适配器转换成用户所期待的接口,让那些接口不兼容的类可以一起工作。角色目标接口(Target):用户所期待的接口适配者(Adaptee):已知类,包含需要通过适配器转换的接口适配器(Adapter):用于将已知类接口转换为用户期待接口的类适配器通过继承实现public interface Adapter { Object get(String sql...原创 2019-04-26 18:08:14 · 84 阅读 · 0 评论 -
《设计模式》6.原型模式(创建型)
http://c.biancheng.net/view/1343.htmlhttps://www.cnblogs.com/shakinghead/p/7651502.html原创 2019-04-18 15:14:27 · 142 阅读 · 0 评论 -
《设计模式》8.桥接模式(结构型)
将多维度变化的事物,通过抽象化和行为实现化将分离解耦,使得它们各自可以独立变化,针对行为进行桥接。角色抽象化(Abstraction):抽象类,包含对实现化对象的引用,作为桥接类扩展抽象化(Refined Abstraction):抽象化的子类,调用实现化中的行为方法实现化(Implementor):行为接口,供扩展抽象化角色调用具体实现化(Concrete Implementor):实...原创 2019-04-28 17:35:09 · 76 阅读 · 0 评论 -
原型模式:思考《序列化与反序列化:Serializable & Externalizable》
序列化:把对象转换为字节序列的过程。反序列化:把字节序列恢复为对象的过程。主要用于:网络中数据传输,先将对象转换为字节数组,再将字节数组以二进制序列的方式传输对象的存储,通常以文件的形式存储,典型的应用场景为:Web 服务器中 Session 对象的序列化Serializable一个类要实现序列化和反序列化,必须实现 Serializable 接口Serializability ...原创 2019-04-19 15:55:21 · 310 阅读 · 0 评论 -
《设计模式》9.装饰器模式(结构型)
在不改变现有对象类结构的前提下,添加新的功能,避免通过继承为类引入静态特征,防止随着扩展功能的增多,子类会很膨胀。角色抽象构件(Component):装饰类和被装饰类的公共接口具体构件(Concrete Component):被装饰类抽象装饰(Decorator):抽象装饰类,包含被装饰类的实例,可以通过其子类扩展被装饰类的功能具体装饰(Concrete Decorator):实现抽象装...原创 2019-04-29 13:37:54 · 74 阅读 · 0 评论 -
《设计模式》10.外观模式(结构型)
为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用,隐藏系统的复杂性。角色外观(Facade):为多个子系统对外提供一个共同的接口子系统(Sub-System):实现系统的部分功能,客户可以通过外观角色访问它客户(Client):通过一个外观角色访问各个子系统的功能子系统 SubSystempublic class SubSystem...原创 2019-04-29 15:23:10 · 81 阅读 · 0 评论 -
《设计模式》11.享元模式(结构型)
public abstract class Flyweight { protected String innerStatus; public Flyweight(String innerStatus) { this.innerStatus = innerStatus; } abstract void operation(UnsharedConcre...原创 2019-05-05 18:02:52 · 87 阅读 · 0 评论 -
《设计模式》12.组合模式(结构型)
又称“整体—部分”模式,组合多个对象形成树形结构以表示具有“整体—部分”关系的层次结构,使用户对单个对象和组合对象具有访问一致性。角色抽象构件(Component):抽象类,定义叶子构件和树枝构件的公共接口,可提供默认实现,叶子构件中提供空实现或抛出异常叶子构件(Leaf):没有子节点,实现抽象构件中的公共接口(空实现或抛出异常)树枝构件(Composite):包含子节点,子节点可以是叶子...原创 2019-05-09 16:17:00 · 122 阅读 · 0 评论 -
《设计模式》14.迭代器模式(行为型)
public abstract class Aggregate<E> { public abstract void set(int index, E element); public abstract void add(E element); public abstract void remove(); public abstract Iterator&...原创 2019-05-10 11:54:43 · 144 阅读 · 0 评论 -
《设计模式》17.命令模式(行为型)
将请求封装成为命令对象,使“方法的请求者”与“方法的实现者”解耦。命令对象可以被存储、转发、排队、记录、处理、撤销等。又称为动作(Action)模式或事务(Transaction)模式。角色调用者/请求者(Invoker):请求的发送者,持有一个或多个命令对象,通过调用命令对象执行命令接口处理相关请求,它不直接访问接收者抽象命令类(Command):声明执行命令的接口(execute)具体...原创 2019-05-15 15:05:07 · 150 阅读 · 0 评论 -
《设计模式》18.策略模式(行为型)
定义一系列的算法,将每一个算法封装起来,使算法的行为和实现分离开,算法可以相互替换并不影响用户角色抽象策略(Strategy):定义一个策略接口具体策略(Concrete Strategy):抽象策略实现,不同的策略提供不同的实现方式上下文(Context):持有策略类的引用,对外提供 setStrategy 方法和执行策略接口的方法供用户调用抽象策略 Strategypublic i...原创 2019-05-15 16:28:23 · 166 阅读 · 0 评论 -
《设计模式》5.建造者模式(创建型)
package com.designpatterns.builder;import lombok.Data;import lombok.ToString;import net.sf.cglib.beans.BeanCopier;import org.apache.commons.lang3.builder.ToStringBuilder;import org.apache.common...原创 2019-04-17 16:29:04 · 109 阅读 · 0 评论 -
《设计模式》10.Javassist动态代理(结构型)
public class ProxyTarget { public void doSomething() { System.out.println("do something..."); }}import javassist.util.proxy.MethodHandler;import javassist.util.proxy.ProxyFactory;...原创 2019-04-03 17:18:51 · 442 阅读 · 0 评论 -
《设计模式》2.简单工厂模式(创建型)
静态工厂(简单工厂)此处以车辆(Vehicle)为例,有三种车:小轿车(Car)、公交车(Bus)、出租车(Taxi)。public interface Vehicle { /** * 介绍说明 */ void specification();}public class Car implements Vehicle { @Override ...原创 2019-03-29 23:22:51 · 89 阅读 · 0 评论 -
《设计模式》3.工厂模式(创建型)
相比于静态工厂模式,工厂模式进一步的解耦,为每个类型创建一个工厂类,所有的工厂类都实现同一个工厂接口,通过不同的工厂类创建不同的实例。public interface VehicleFactory { Vehicle create();}public class CarFactory implements VehicleFactory { @Override pub...原创 2019-03-29 23:23:31 · 59 阅读 · 0 评论 -
《设计模式》4.抽象工厂模式(创建型)
public enum VehicleColor { BLACK, WHITE, GRAY, RED;}public abstract class BaseVehicle implements Vehicle { private VehicleType type; private VehicleColor color; public B...原创 2019-03-29 23:24:05 · 125 阅读 · 0 评论 -
《设计模式》7.静态代理(结构型)
public class ProxyTarget { public void doSomething() { System.out.println("do something"); }}public class StaticProxy { private ProxyTarget target; public StaticProxy(ProxyT...原创 2019-03-29 23:24:35 · 47 阅读 · 0 评论 -
《设计模式》8.JDK动态代理(结构型)
JDK动态代理基于接口实现,代理类必须实现接口。public class ProxyTarget implements ITarget { public void doSomething() { System.out.println("do something"); }}通过实现 java.lang.reflect.InvocationHandler 接口创...原创 2019-03-29 23:25:07 · 99 阅读 · 0 评论 -
Java枚举实现原理
编译枚举EnumImplMechanism.java,通过jad反编译获得EnumImplMechanism.jad文件D:\>javac EnumImplMechanism.javaD:\>jad EnumImplMechanism.classParsing EnumImplMechanism.class... Generating EnumImplMechanism.jad...原创 2019-03-29 23:26:14 · 206 阅读 · 0 评论 -
《设计模式》9.Cglib动态代理(二)(结构型)
Cglib Callback 6 种实现:NoOpMethodInterceptorInvocationHandlerFixedValueLazyLoaderDispatcherProxyRefDispatcherNoOp不做任何操作,直接调用目标方法public interface NoOp extends Callback { public static final ...原创 2019-04-04 16:57:10 · 206 阅读 · 0 评论 -
《设计模式》1.单例模式(创建型)
饿汉式(饥饿加载)static在类加载时初始化一次,保证线程安全,final保证变量不可更改如果构造函数涉及I/O等耗时较长的操作会增加类加载时间过早加载也会浪费内存无法防止反射攻击public class Singleton { private static final Singleton instance = new Singleton(); private S...原创 2019-03-29 10:48:49 · 94 阅读 · 0 评论 -
《设计模式》9.Cglib动态代理(一)(结构型)
Cglib 动态代理原理:动态生成以目标类作为基类的代理类,通过 MethodProxy 拦截并调用父类相应的方法。因此目标类不能被 final 修饰,否则报错。代理对象public class ProxyTarget { public void doSomething() { System.out.println("do something"); }}i...原创 2019-04-03 22:46:53 · 258 阅读 · 0 评论 -
《设计模式》13.观察者模式(行为型)
对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。应用场景:广播监听 (Event / Listener / Status)推模式(Push)Observable主动向Observer推送消息,不管对方是否需要。import java.util.ArrayList;import java.util.List;public cla...原创 2019-04-09 11:08:26 · 86 阅读 · 0 评论 -
《设计模式》15.责任链模式(行为型)
每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。应用场景:过滤器 Filter拦截器 InterceptorTomcat 编解码处理句柄接口,定义一个handleRequest方法public interface Handler { double handleRequest(double op1, doubl...原创 2019-04-09 14:38:56 · 83 阅读 · 0 评论 -
《设计模式》16.访问者模式(行为型)
把数据结构和作用于数据结构上的操作之间的耦合解脱开,把处理从数据结构中分离出来。适用于有比较稳定的数据结构,又有比较易于变化的算法的场景。优点:增加新的操作很容易,增加新的操作就意味着增加一个新的访问者,访问者模式将相关行为集中到一个访问者对象中。缺点:增加新的数据结构比较困难,破坏了封装,违反了依赖倒置原则。角色抽象访问者(Visitor):为每个具体元素类声明一个(参数类型为具体元素)...原创 2019-05-13 17:10:23 · 224 阅读 · 0 评论