软件体系结构-职责链模式
软件体系结构-职责链模式 定义 行为型模式 避免将一个请求的发送者与接收者耦合在一起,让多个对象都有机会处理请求。将接收请求的对象连接成一条链,并且沿着这条链传递请求,直到有一个对象能够处理它为止。 UML类图 两个部分:抽象处理者、具体处理者 代码 抽象处理者 123456public abstract class AbstractFilter { protected AbstractFilter next; public abstract void SetNext(AbstractFilter filter); public abstract void handle(String req);} 具体处理者 123456789101112131415public class DataTypeFilter extends AbstractFilter{ @Override public void SetNext(AbstractFilter filter) { this.next =...
软件体系结构-代理模式
软件体系结构-代理模式 定义 给某一个对象提供一个代理或占位符,并由代理对象来控制对原对象的访问。 UML类图 三个部分:Subject(抽象主题角色)、Proxy(代理主题角色)、RealSubject(真实主题角色) 代码 抽象主题角色: 123public abstract class Subject{ public abstract void request();} 代理主题角色: 12345678910111213141516public class Proxy extends Subject{ private RealSubject realSubject = new RealSubject(); public void preRequest(){ 前置业务代码 } public void postRequest(){ 后置业务代码 } public void request(){ ...
软件体系结构-外观模式
软件体系结构-外观模式 定义 为子系统中的一组接口提供一个统一的入口。外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 迪米特法则(最少知识原则)的体现 UML类图 两个部分:外观角色、子系统角色 外观模式+单例模式: 代码 子系统角色 12345public class SubSystemA{ public void mA(){ 业务代码 }} 外观角色 12345678910public class Façade{ private SubSystemA obj1 = new SubSystemA(); private SubSystemB obj2 = new SubSystemB(); private SubSystemC obj3 = new SubSystemC(); public void method(){ obj1.mA(); obj2.mB(); obj3.mC(); ...
软件体系结构-组合模式
软件体系结构-组合模式 定义 组合多个对象形成树形结构以表示具有部分-整体关系的层次结构。组合模式让客户端可以统一对待单个对象和组合对象。 UML类图 包含三个部分:抽象构件、叶子构件和容器构件 代码实现 抽象构件: 123456public abstract class AbstractNode { public abstract void addNode(AbstractNode node); public abstract void removeNode(AbstractNode node); public abstract AbstractNode getNode(int i); public abstract void handleMessage(String msg);} 叶子构件: 1234567891011121314151617181920212223242526272829303132333435public class UserNode extends AbstractNode{ ...
软件体系结构-桥接模式
软件体系结构-桥接模式 定义 将抽象部分与它的实现部分解耦,使得两者都能够独立变化。 与适配器模式联合使用: 桥接模式:用于系统的初步设计,对于存在两个独立变化维度的类可以将其分为抽象化和实现化两个角色,使它们可以分别进行变化 **适配器模式:**当发现系统与已有类无法协同工作时 UML类图 四个部分: Abstraction(抽象类) RefinedAbstraction(扩充抽象类) Implementor(实现类接口) ConcreteImplementor(具体实现类) 如果需要更换毛笔或配色,只需修改配置文件 代码 抽象类: 1234public abstract class Image{ public Filter filter; public abstract void setFilter(Filter filter);} 扩充抽象类: 123456789101112public class JpgImage extends Image{ public JpgImage(Filter filter)...
软件体系结构-适配器模式
软件体系结构-适配器模式 定义 结构型设计模式 适配器模式:将一个类的接口转换成客户希望的另一个接口。适配器模式让那些接口不兼容的类可以一起工作。 UML类图 三个部分:目标抽象类,适配器类,适配者类 **类适配器:**Java不支持多继承,目标抽象类只能是接口 对象适配器: 缺省适配器模式: 当不需要实现一个接口所提供的所有方法时,可先设计一个抽象类实现该接口,并为接口中每个方法提供一个默认实现(空方法),那么该抽象类的子类可以选择性地覆盖父类的某些方法来实现需求,它适用于不想使用一个接口中的所有方法的情况,又称为单接口适配器模式。 实例: 代码 目标类 123public abstract class DataProcessor { public abstract String encode(String str);} 适配器类 12345678910111213public class EnciphterAdapter extends DataProcessor { //持有适配者的引用 private...
软件体系结构-单例模式
软件体系结构-单例模式 定义 确保一个类只有一个实例,并提供一个全局访问点来访问这个唯一实例。 某个类只能有一个实例(private static) 必须自行创建这个实例(私有构造方法) 必须向整个系统提供这个实例(public getInstance) UML 单例模式的几种写法 饿汉式单例 12//在类被加载时就创建private static Singleton instance = new Singleton(); 懒汉式单例 123456789//在被引用时才加载private static Singleton instance = null;public static LazySingleton getInstance() { if (instance == null) { instance = new LazySingleton(); } return instance;} 懒汉式与双重检查锁定 12345678910111213141516171819public class...
软件体系结构-原型模式
软件体系结构-原型模式 定义 使用原型实例指定待创建对象的类型,并且通过复制这个原型来创建新的对象。 深克隆与浅克隆 浅克隆:当原型对象被复制时,只复制它本身和其中包含的值类型的成员变量,而引用类型的成员变量并没有复制(还是指向同一块地址) 深克隆:除了对象本身被复制外,对象所包含的所有成员变量也将被复制(引用变量有了一个新的地址) UML类图 在Java中通过继承Cloneable接口或Serializable实现浅克隆与深克隆 代码 浅克隆: 123456789101112131415161718public class ShallowCustomer implements Cloneable{ public ShallowAddress customerAddress = new ShallowAddress(); public ShallowAddress getCustomerAddress(){ return customerAddress; } @Override public...
软件体系结构-抽象工厂模式
软件体系结构-抽象工厂模式 定义 工厂方法模式中,每个具体工厂只有一个或者一组重载的工厂方法,只能生产一种产品,可能会导致系统中存在大量的工厂类,势必会增加系统的开销。 抽象工厂模式中,一个工厂可以生产一系列产品(一族产品),极大减少了工厂类的数量 UML类图 应用实例: 更换产品族只需要修改配置文件 代码 抽象产品Map 123public abstract class Map { public abstract void loadMap();} 具体产品MapA 1234567public class MapA extends Map{ @Override public void loadMap() { System.out.println("load map A"); }} 抽象产品Sound 123public abstract class Sound { public abstract void...
软件体系结构-工厂方法模式
软件体系结构-工厂方法模式 定义 简单工厂不符合开闭原则:添加新的产品类需要修改工厂类的代码 工厂方法模式: 不再提供一个工厂类来统一负责所有产品的创建,而是将具体产品的创建过程交给专门的工厂子类去完成 如果出现新的产品类型,只需要为这种新类型的产品定义一个具体的工厂类就可以创建该新产品的实例 目的是将产品类的实例化操作延迟到工厂子类中完成,即通过工厂子类来确定究竟应该实例化哪一个具体产品类 开闭原则 √ UML类图 代码 抽象产品 123public abstract class ImageReader { public abstract void readImage();} 具体产品 123456public class GifReader extends ImageReader { @Override public void readImage(){ System.out.println("Read a gif"); ...






