(32)C#设计模式——适配器模式(Adapter Pattern)

引言

在实际的开发过程中,由于应用环境的变化,我们需要的实现在新环境中没有现存对象可以满足,但是其他环境却存在这样现存的对象。如何在新环境中调用“现存的对象”呢?采用适配器模式可以解决。适配器模式使得新环境中不需要去重复实现已经存在了的实现,而很好的把现有的对象(指原来环境中的现有对象)加入到新环境中来使用。

详细介绍

定义:把一个类的接口变换成客户端所期待的另一种接口,从而使得原本接口不匹配而无法一起工作的两个类能够一起工作。适配器模式有类的适配器模式和对象的适配器模式。

类的适配器模式实现:

在生活中,我们买的电器插头是两个孔的,但是我们买的插座只有三个孔的,此时我们就希望电器的插头可以转换为三个孔的就好了,这样我们就可以直接插在插座上,此时三个孔插头就是客户端期待的另一种接口,自然两个孔的插头就是现有的接口,适配器模式就是用来完成这种转换的。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _22AdapterPatternDemo
{
    /// <summary>
    /// 测试类
    /// </summary>
    class Program
    {
        static void Main(string[] args)
        {
            IThreeHole threehole = new PowerAdapter();
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
原型模式是一种创建型设计模式,它允许你通过复制一个已经存在的对象来创建新的对象,而不是通过实例化来创建。这种方式可以大大减少对象的创建时间和内存消耗。 在C#中,原型模式的实现需要满足两个条件: 1. 实现ICloneable接口,该接口只有一个方法Clone(),用于复制对象。 2. 对象必须是可复制的,即必须是浅复制或深复制。 浅复制是指复制一个对象,但是不复制对象中的引用类型成员变量,这意味着复制的对象和原始对象共享相同的引用类型成员变量。深复制则是复制一个对象及其引用类型成员变量,这意味着复制的对象和原始对象不共享相同的引用类型成员变量。 下面是一个使用原型模式的示例代码: ```csharp using System; namespace PrototypePattern { // 实现ICloneable接口 public class Person : ICloneable { public string Name { get; set; } public int Age { get; set; } public Address Address { get; set; } public object Clone() { // 深复制 return new Person { Name = this.Name, Age = this.Age, Address = new Address { Street = this.Address.Street, City = this.Address.City, State = this.Address.State } }; } public override string ToString() { return $"Name: {Name}, Age: {Age}, Address: {Address}"; } } public class Address { public string Street { get; set; } public string City { get; set; } public string State { get; set; } public override string ToString() { return $"{Street}, {City}, {State}"; } } class Program { static void Main(string[] args) { var person1 = new Person { Name = "Tom", Age = 20, Address = new Address { Street = "123 Main St", City = "New York", State = "NY" } }; // 使用Clone方法复制对象 var person2 = (Person)person1.Clone(); person2.Name = "Jerry"; person2.Address.Street = "456 Elm St"; Console.WriteLine(person1); Console.WriteLine(person2); } } } ``` 输出结果: ``` Name: Tom, Age: 20, Address: 123 Main St, New York, NY Name: Jerry, Age: 20, Address: 456 Elm St, New York, NY ``` 可以看到,使用原型模式可以方便地创建新的对象,而且不需要关心对象的创建过程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值