zoukankan      html  css  js  c++  java
  • 设计模式之适配器模式

    注解:适配器模式的设计原则是“只和朋友交谈”

    总结:将一个类的接口转换成客户期望的另一个接口。
    适配器让原本不兼容的类可以合作无间。
    当要使用一个现的类而其接口冻符合你的需要时,就使用适配器。

    你可能会经常遇到下面这种情况,厂家提供的接口和你写的接口合不上,怎么办??

    这时候你不想改变自己的接口来适应厂家的接口,同时你又不能改变厂家的接口,那么这个时候你就应该考虑使用适配器模式了。

    厂家调用他们的接口,而实际上我们给的却是看似像厂家的接口的接口。

    通过上图我想大家应该很清楚了吧,这个模式很简单的。但是却是很有用的。

    鸭子接口(厂家提供的接口)
    namespace 适配器模式
    {
    /// <summary>
    /// 鸭子接口(厂家提供的接口)
    /// </summary>
    public interface IDuck
    {
    /// <summary>
    /// 嘎嘎叫
    /// </summary>
    void Rattle();

    /// <summary>
    /// 飞行
    /// </summary>
    void Fly();

    }
    }
    火鸡(被适配的接口)
    1 namespace 适配器模式
    2 {
    3 /// <summary>
    4 /// 火鸡(被适配的接口)
    5 /// </summary>
    6   public interface ITurkey
    7 {
    8 /// <summary>
    9 /// 咯咯叫
    10 /// </summary>
    11   void Giggling();
    12
    13 /// <summary>
    14 /// 飞行
    15 /// </summary>
    16   void Fly();
    17 }
    18 }
    绿毛鸭子(客户的实现)
    1 namespace 适配器模式
    2 {
    3 /// <summary>
    4 /// 绿毛鸭子(客户的实现)
    5 /// </summary>
    6   public class GreenDuck : IDuck
    7 {
    8 public void Rattle()
    9 {
    10 Console.WriteLine("发出声音!");
    11 }
    12
    13 public void Fly()
    14 {
    15 Console.WriteLine("在飞行!");
    16 }
    17 }
    18 }
    19  

    红色火鸡(我们的实现)
    1 namespace 适配器模式
    2 {
    3 /// <summary>
    4 /// 红色火鸡(我们的实现)
    5 /// </summary>
    6   public class RedTurkey : ITurkey
    7 {
    8
    9 public void Giggling()
    10 {
    11 Console.WriteLine("发出声音!");
    12 }
    13
    14 public void Fly()
    15 {
    16 Console.WriteLine("在飞行!");
    17 }
    18 }
    19 }
    20  

    适配器(把火鸡伪装成鸭子)
    1 namespace 适配器模式
    2 {
    3 /// <summary>
    4 /// 适配器(把火鸡伪装成鸭子)
    5 /// </summary>
    6   public class TurkeyAdapter : IDuck
    7 {
    8 public TurkeyAdapter(ITurkey turkey)
    9 {
    10 this.Turkey = turkey;
    11 }
    12
    13 ITurkey Turkey { get; set; }
    14
    15 public void Rattle()
    16 {
    17 Turkey.Giggling();
    18 }
    19
    20 public void Fly()
    21 {
    22 Turkey.Fly();
    23 }
    24 }
    25 }
    26  

    uml图如下:

    一个完整的人生应该是宽恕、容忍、等待和爱!
  • 相关阅读:
    正则表达式-元字符
    利用shell脚本实现nginx 的logs日志分割
    Linux下 nfs部署
    Linux下 niginx部署
    linux 硬盘分区与格式化挂载 (二)
    linux 硬盘分区与格式化挂载
    linux 系统监控
    [LeetCode] Best Time to Buy and Sell Stock
    [LeetCode] Convert Sorted Array to Binary Search Tree
    [LeetCode] Binary Tree Inorder Traversal
  • 原文地址:https://www.cnblogs.com/homezzm/p/1619116.html
Copyright © 2011-2022 走看看