赞
踩
适配器模式是一种结构型设计模式,旨在将一个类的接口转换成客户端所期待的另一个接口,从而使原本由于接口不兼容而无法一起工作的类能够协同工作。适配器模式通常用于需要复用现有类但其接口与要求不匹配的情况。
适配器模式允许接口不兼容的类可以相互合作,其作用在于解决不同接口之间的兼容性问题,使得原本不兼容的类可以协同工作。它允许我们创建一个包装器 (Adapter),该包装器实现了客户端所期待的目标接口,并将调用转发给被包装对象。
在适配器模式中,有两种常见的实现方式:对象适配器和类适配器。
适配器模式的结构包括:目标接口 (Target)、适配器 (Adapter)、被适配对象 (Adaptee)。
// 目标接口 interface Target { void request(); } // 被适配对象 class Adaptee { public void specificRequest() { System.out.println("Adaptee's specificRequest called"); } } // 类适配器 class ClassAdapter extends Adaptee implements Target { @Override public void request() { specificRequest(); } } // 对象适配器 class ObjectAdapter implements Target { private Adaptee adaptee; public ObjectAdapter(Adaptee adaptee) { this.adaptee = adaptee; } @Override public void request() { adaptee.specificRequest(); } }
适配器模式常用于以下场景:
桥接模式是一种结构型设计模式,旨在将抽象部分与实现部分分离,使它们可以独立地变化。桥接模式通过将抽象部分和实现部分分开,使它们可以独立地进行扩展和变化,从而降低它们之间的耦合度。
桥接模式的核心思想是将抽象与实现分离,使它们可以独立变化,相互之间解耦。这样一来,抽象部分和实现部分可以分别进行扩展,而不会相互影响,从而提高了系统的灵活性和可扩展性。
在桥接模式中,有两个重要的角色:抽象类 (Abstraction) 和实现类 (Implementor)。抽象类定义了抽象部分的接口,而实现类则负责实现抽象部分的具体功能。
// 抽象类 abstract class Abstraction { protected Implementor implementor; public Abstraction(Implementor implementor) { this.implementor = implementor; } public abstract void operation(); } // 实现类接口 interface Implementor { void operationImpl(); } // 具体实现类A class ConcreteImplementorA implements Implementor { @Override public void operationImpl() { System.out.println("ConcreteImplementorA operationImpl called"); } } // 具体实现类B class ConcreteImplementorB implements Implementor { @Override public void operationImpl() { System.out.println("ConcreteImplementorB operationImpl called"); } } // 桥接模式的具体实现 class RefinedAbstraction extends Abstraction { public RefinedAbstraction(Implementor implementor) { super(implementor); } @Override public void operation() { implementor.operationImpl(); } }
桥接模式常用于以下场景:
组合模式是一种结构型设计模式,它允许将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户可以统一对待单个对象和组合对象,从而简化了客户端的代码。
组合模式的核心思想是将对象组织成树形结构,使得客户端可以统一处理单个对象和组合对象。这样一来,用户可以像处理单个对象一样处理组合对象,无需关心其内部结构。
在组合模式中,有两个重要的角色:组件 (Component) 和叶子节点 (Leaf)、容器节点 (Composite)。
// 抽象组件类 interface Component { void operation(); } // 叶子节点类 class Leaf implements Component { @Override public void operation() { System.out.println("Leaf operation called"); } } // 容器节点类 class Composite implements Component { private List<Component> children = new ArrayList<>(); public void add(Component component) { children.add(component); } public void remove(Component component) { children.remove(component); } @Override public void operation() { for (Component component : children) { component.operation(); } } }
组合模式常用于以下场景:
装饰器模式是一种结构型设计模式,允许向现有对象动态地添加新功能,同时又不改变其结构。这种模式对于扩展类的功能非常有用,同时又保持了类的简单性和可读性。
装饰器模式允许在不改变现有对象结构的情况下,动态地添加新功能。它通过创建一个装饰器类,该类包含一个指向原始对象的引用,并实现与原始对象相同的接口。通过将装饰器类的对象包裹在原始对象周围,可以逐步添加新的行为。
在装饰器模式中,有以下几个关键角色:组件 (Component)、具体组件 (ConcreteComponent)、装饰器 (Decorator)、具体装饰器 (ConcreteDecorator)。
// 抽象组件类 interface Component { void operation(); } // 具体组件类 class ConcreteComponent implements Component { @Override public void operation() { System.out.println("ConcreteComponent operation called"); } } // 抽象装饰器类 abstract class Decorator implements Component { protected Component component; public Decorator(Component component) { this.component = component; } @Override public void operation() { component.operation(); } } // 具体装饰器类 class ConcreteDecorator extends Decorator { public ConcreteDecorator(Component component) { super(component); } @Override public void operation() { super.operation(); addedBehavior(); } private void addedBehavior() { System.out.println("Added behavior by ConcreteDecorator"); } }
装饰器模式常用于以下场景:
外观模式是一种结构型设计模式,提供了一个统一的接口,用于访问子系统中的一群接口。它隐藏了子系统的复杂性,使得客户端更加容易使用。
外观模式的核心思想是提供一个简单的接口,隐藏了系统的复杂性,并将系统的子模块组织成一个更大的系统。这样,客户端只需要与外观对象进行交互,而不需要了解内部子系统的细节。
在外观模式中,有以下几个关键角色:外观 (Facade)、子系统 (Subsystem)。
// 子系统类 class Subsystem1 { public void operation1() { System.out.println("Subsystem1 operation"); } } class Subsystem2 { public void operation2() { System.out.println("Subsystem2 operation"); } } class Subsystem3 { public void operation3() { System.out.println("Subsystem3 operation"); } } // 外观类 class Facade { private Subsystem1 subsystem1; private Subsystem2 subsystem2; private Subsystem3 subsystem3; public Facade() { subsystem1 = new Subsystem1(); subsystem2 = new Subsystem2(); subsystem3 = new Subsystem3(); } public void operation() { subsystem1.operation1(); subsystem2.operation2(); subsystem3.operation3(); } }
外观模式常用于以下场景:
享元模式是一种结构型设计模式,旨在通过共享对象来最小化内存使用和提高性能。它适用于大量相似对象的场景,通过共享内部状态来减少内存占用。
享元模式的核心思想是共享对象以减少内存占用和提高性能。在享元模式中,对象分为内部状态和外部状态。内部状态是可以共享的,而外部状态是不可共享的。通过共享内部状态,可以减少系统中重复对象的数量,从而节省内存。
在享元模式中,有以下几个关键角色:享元工厂 (FlyweightFactory)、具体享元 (ConcreteFlyweight)、非共享具体享元 (UnsharedConcreteFlyweight)、享元接口 (Flyweight)。
// 享元接口 interface Flyweight { void operation(); } // 具体享元 class ConcreteFlyweight implements Flyweight { private String intrinsicState; public ConcreteFlyweight(String intrinsicState) { this.intrinsicState = intrinsicState; } @Override public void operation() { System.out.println("ConcreteFlyweight: Intrinsic State = " + intrinsicState); } } // 享元工厂 class FlyweightFactory { private Map<String, Flyweight> flyweights = new HashMap<>(); public Flyweight getFlyweight(String key) { if (!flyweights.containsKey(key)) { flyweights.put(key, new ConcreteFlyweight(key)); } return flyweights.get(key); } }
享元模式常用于以下场景:
代理模式是一种结构型设计模式,用于控制对其他对象的访问。
代理模式充当了客户端和目标对象之间的中介,控制对目标对象的访问。它通常用于以下情况:
java.lang.reflect.Proxy
类实现的,可以代理任意接口。相比静态代理更灵活,但性能上略有损失。代理模式通常包含以下角色:
示例代码:
// 抽象主题 interface Subject { void request(); } // 真实主题 class RealSubject implements Subject { public void request() { System.out.println("RealSubject: Handling request."); } } // 代理类 class Proxy implements Subject { private RealSubject realSubject; public Proxy() { this.realSubject = new RealSubject(); } public void request() { System.out.println("Proxy: Pre-processing request."); realSubject.request(); System.out.println("Proxy: Post-processing request."); } }
优点:
缺点:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。