设计模式之桥接模式

  • 桥接模式:将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体(Handle and Body)模式或接口(Interface)模式。
    例子:
    例:模拟毛笔:
    现需要提供大中小3种型号的画笔,能够绘制5种不同颜色,如果使用蜡笔,我们需要准备3*5=15支蜡笔,也就是说必须准备15个具体的蜡笔类。而如果使用毛笔的话,只需要3种型号的毛笔,外加5个颜料盒,用3+5=8个类就可以实现15支蜡笔的功能。使用桥接模式设计和实现来模拟毛笔的使用过程。
    类图:
    这里写图片描述
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 桥接模式
{
    class Program
    {
        static void Main(string[] args)
        {
            ChPen pen;
            Color c = new white();
            pen = new sPen();
            pen.Draw(c);
            pen = new mPen();
            pen.Draw(c);
            pen = new lpen();
            pen.Draw(c);
            Console.ReadKey();
        }
    }
    interface Color
    {
        void Dye();//着色
    }
    interface ChPen
    {
        void Draw(Color color);
    }
   class sPen:ChPen
   {
       public static string type = "小号毛笔";
       public  void Draw(Color color)
       {
           color = new white();
           color.Dye();
           Console.WriteLine("{0}绘画",sPen.type);
           color = new black();
           color.Dye();
           Console.WriteLine("{0}绘画", sPen.type);
           color = new yellow();
           color.Dye();
           Console.WriteLine("{0}绘画", sPen.type);
           color = new green();
           color.Dye();
           Console.WriteLine("{0}绘画", sPen.type);
           color = new red();
           color.Dye();
           Console.WriteLine("{0}绘画", sPen.type);
       }
   }
    class mPen:ChPen
    {
        public static string type = "中号毛笔";
        public  void Draw(Color color)
        {
            color = new white();
            color.Dye();
            Console.WriteLine("{0}绘画", mPen.type);
            color = new black();
            color.Dye();
            Console.WriteLine("{0}绘画", mPen.type);
            color = new yellow();
            color.Dye();
            Console.WriteLine("{0}绘画", mPen.type);
            color = new green();
            color.Dye();
            Console.WriteLine("{0}绘画", mPen.type);
            color = new red();
            color.Dye();
            Console.WriteLine("{0}绘画", mPen.type);
        }
    }
    class lpen:ChPen
    {
        public static string type = "大号毛笔";
        public  void Draw(Color color)
        {
            color = new white();
            color.Dye();
            Console.WriteLine("{0}绘画", lpen.type);
            color = new black();
            color.Dye();
            Console.WriteLine("{0}绘画", lpen.type);
            color = new yellow();
            color.Dye();
            Console.WriteLine("{0}绘画", lpen.type);
            color = new green();
            color.Dye();
            Console.WriteLine("{0}绘画", lpen.type);
            color = new red();
            color.Dye();
            Console.WriteLine("{0}绘画", lpen.type);
        }
    }
    class red : Color
    {
        public static string color = "红色";
        public  void Dye()
        {
            Console.WriteLine("着色{0}", red.color);
        }
    }
    class green : Color
    {
        public static string color = "黄色";
        public  void Dye()
        {
            Console.WriteLine("着色{0}", green.color);
        }
    }
    class yellow : Color
    {
        public static string color = "黄色";
        public  void Dye()
        {
            Console.WriteLine("着色{0}",yellow.color);
        }
    }
    class black : Color
    {
        public static string color = "黑色";
        public  void Dye()
        {
            Console.WriteLine("着色{0}", black.color);
        }
    }
    class white:Color
    {
        public static string color = "白色";
        public  void Dye()
        {
            Console.WriteLine("着色{0}", white.color);
        }
    }
}

如有错误之处还请指正!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ExtraMile

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值