四川城乡和住房建设厅官方网站,后端开发需要掌握哪些知识,美橙互联网站,做网站卖产品怎么开展前面几篇文章我们学习了创建型模式#xff0c;从本篇文章开始#xff0c;我们将学习结构型模式。
什么是结构型模式
结构型模式是一种设计模式#xff0c;它描述了如何将类或对象结合在一起形成更大的结构#xff0c;以提供新的功能或实现更复杂的行为。结构型模式包括以…前面几篇文章我们学习了创建型模式从本篇文章开始我们将学习结构型模式。
什么是结构型模式
结构型模式是一种设计模式它描述了如何将类或对象结合在一起形成更大的结构以提供新的功能或实现更复杂的行为。结构型模式包括以下几种
适配器模式Adapter Pattern将一个类的接口转换成客户端所期望的另一种接口从而让原本因接口不兼容而不能一起工作的类能够一起工作。桥接模式Bridge Pattern将抽象部分与它的实现部分分离使它们都可以独立地变化。组合模式Composite Pattern将对象组合成树形结构以表示“部分-整体”的层次结构使得客户端对单个对象和组合对象的使用具有一致性。装饰器模式Decorator Pattern动态地给一个对象添加一些额外的职责就增加功能而言装饰器模式比生成子类更为灵活。外观模式Facade Pattern为子系统中的一组接口提供一个一致的界面定义了一个高层接口使得子系统更加容易使用。享元模式Flyweight Pattern运用共享技术有效地支持大量细粒度的对象。代理模式Proxy Pattern为其他对象提供一种代理以控制对这个对象的访问。
这些结构型模式都是为了解决不同的设计问题而产生的具有一定的适用范围和场景。在实际开发中我们可以根据具体的需求来选择使用哪种结构型模式以达到最优的设计效果。 首先我们来学习一下适配器模式
什么是适配器模式
适配器模式是一种结构型设计模式用于将一个类的接口转换成客户端所期望的另一种接口。在现实生活中适配器是一个常见的概念比如我们去旅游时需要一个转换器适配器将电器从国内电压适配到国外电压。 在软件开发中适配器模式也是经常用到的。它可以帮助我们在不修改已有代码的情况下实现不同类之间的互相适配从而提高代码的复用性和可维护性。 适配器模式包含三个角色目标接口、适配器和被适配者。目标接口是客户端所期望的接口适配器实现了目标接口并持有被适配者的引用通过调用被适配者的接口实现目标接口。被适配者是原本存在的类但是其接口与目标接口不兼容。 适配器模式有两种实现方式类适配器和对象适配器。类适配器通过继承被适配者类和实现目标接口来实现适配器。对象适配器则通过持有被适配者的引用在适配器中实现目标接口来实现适配器。 适配器模式的优点在于可以将不兼容的接口进行适配使得现有代码得到复用而不需要改变现有代码。同时适配器模式也可以降低类之间的耦合度提高代码的灵活性和可维护性。 适配器模式也有一些缺点。首先适配器会增加系统的复杂性增加代码的数量和维护成本。其次适配器模式不适合在设计初期使用而应该是在已有代码需要进行接口调整时使用。 总的来说适配器模式是一种实用性很强的设计模式可以帮助我们在不修改已有代码的情况下实现接口的适配提高代码的复用性和可维护性。
如何实现适配器模式
实现适配器模式的一般步骤如下
定义目标接口即需要适配的接口也就是系统需要使用的接口。定义适配器实现目标接口并持有适配者对象的引用。定义适配者即需要被适配的对象其原本的接口与系统需要使用的接口不兼容。在适配器中实现目标接口方法在适配器中将目标接口方法的调用转换为对适配者的调用以达到适配的目的。在客户端中使用适配器将适配器对象传递给客户端由客户端调用目标接口方法。
具体实现步骤可能会因为编程语言和实际应用场景而有所不同但以上是适配器模式的一般实现步骤。 Java实现 下面是Java实现适配器模式的示例代码 首先定义一个目标接口Target
public interface Target {void request();
}然后定义一个需要适配的类Adaptee
public class Adaptee {public void specificRequest() {System.out.println(Adaptee specific request);}
}接下来实现一个适配器Adapter让它实现目标接口Target
public class Adapter implements Target {private Adaptee adaptee;public Adapter(Adaptee adaptee) {this.adaptee adaptee;}public void request() {adaptee.specificRequest();}
}适配器Adapter类持有一个需要适配的对象Adaptee的引用在实现目标接口的方法时通过调用该对象的特定方法实现适配。 最后使用适配器模式将需要适配的类Adaptee适配到目标接口Target上
public class Client {public static void main(String[] args) {Adaptee adaptee new Adaptee();Target target new Adapter(adaptee);target.request();}
}在客户端代码中实例化需要适配的类Adaptee然后将其通过适配器Adapter适配到目标接口Target上实现了对需要适配的类的调用。以上就是适配器模式在Java中的实现步骤和示例代码。
C#实现 在 C# 中适配器模式的实现与 Java 类似。下面是一个简单的示例
// 目标接口
public interface ITarget {void Request();
}// 适配者接口
public class Adaptee {public void SpecificRequest() {Console.WriteLine(Adaptee.SpecificRequest() called.);}
}// 类适配器
public class Adapter : Adaptee, ITarget {public void Request() {SpecificRequest();}
}// 对象适配器
public class ObjectAdapter : ITarget {private Adaptee _adaptee;public ObjectAdapter(Adaptee adaptee) {_adaptee adaptee;}public void Request() {_adaptee.SpecificRequest();}
}// 客户端代码
static void Main(string[] args) {// 类适配器ITarget target1 new Adapter();target1.Request();// 对象适配器Adaptee adaptee new Adaptee();ITarget target2 new ObjectAdapter(adaptee);target2.Request();
}在类适配器中适配器类继承了适配者类并实现了目标接口。在对象适配器中适配器类将适配者对象作为其成员并实现了目标接口。两种实现方式的结果是相同的都可以将适配者的接口转换成目标接口从而使得客户端可以通过目标接口调用适配者的方法。 需要注意的是在 C# 中接口和抽象类都可以作为适配器的目标接口。由于 C# 不支持多重继承因此无法像 Java 一样通过继承多个接口来实现适配器模式。但是C# 支持接口的默认实现这使得我们可以实现一个默认适配器类用来适配目标接口的默认行为。
总结
适配器模式通过包装一个不兼容的对象将其转换为与另一个对象兼容的形式。它提供了一种将新代码与现有代码集成的方法同时也可以减少代码的重复。在实际应用中适配器模式可以用于集成不同的系统和组件使它们能够无缝地协同工作。它的缺点是增加了代码的复杂性因为需要额外的适配器类来进行转换。在设计时需要考虑到接口的扩展和变化以免影响适配器的使用。适配器模式在实际的软件开发中非常有用特别是在集成不同的系统或组件时。