C#デザインパターン(10) - ブリッジモード

出典:https://www.cnblogs.com/wyy1234/

 

カタログを読みます

 


 1.はじめにブリッジモード

  抽象とデカップリングを実現するためのブリッジモード、両方が独立して変化させることができるようになっています。オブジェクト指向命令を使用して、簡単な言葉で: クラスは、多角度によって分類することができる、各分類ので、単離された、すべての角がマルチアングルを結合減らす独立に種々の角度の間で変化入れ、変更することができます。 セイは、ジオメトリ・ビデオの例十分に理解できないことがあります。私たちは、ジオメトリは色の分類で割った、三角形、長方形、円形分割、形状分類によれば、2つの色の形状と角度に応じて分類することができるドローグラフィック、青、黄、赤のグラフィックパターン、形状、色はすべて、例えば、我々はまた、五芒星形を追加することができ、追加することができ、色は緑を追加することができます。継承によって実装された場合、その後、図1に示すように、我々は五芒星形を追加した場合、私たちは、あなたが黄色、五芒星、青追加する必要があり、特定のサブクラスは9種類(タイプ*色タイプの形状)を持っている必要があります赤い五芒星と3つの具象サブクラスを五芒星、色の追加は、様々な形状の色を追加すると同じ必要があります。タイプの形状や色は、我々は多くを持っているときは、サブクラスの爆発で、その結果、特定のサブカテゴリーの多くを必要とします。
  2つだけの角度分類は、分類されたクラスは、複数の角度を持って、具象サブクラスの種類(クラス1つのタイプ2タイプ* *カテゴリーカテゴリータイプ3 ...)もさらに描画例。その後、我々は、ブリッジモードの最適化、使用することができ 強く組み合わせは、継承を使用するという考えよりも大きい弱い結合関係、に結合された継承関係によって産生さ形状及び色を 下図、ブリッジモードを使用して、我々は五芒星を追加したい場合は、サブクラスが唯一の私たちが望む場合は、五芒星の特定の色を追加して行く必要はありません、五芒星形のクラスへのアクセスを追加する必要がありますブルー五芒星と五芒星は青を取得するために結合されます。そのような設計は、形状や色のカップリング、具象サブクラスを低減するの種類を減少させます。

ブリッジモードの役割

抽象化: そのようなクラスの形状として抽象生成されたクラス、
Implementor:行为实现接口 抽象化后关注的其他的特性,如例子中颜色接口。注意:我们可以把颜色抽象化生成抽象类,把形状作为行为实现接口;
RefinedAbstraction:抽象类子类,如圆形,长方形等;
ConcreteImplementor:行为实现接口的实现类,如黄色,红色等;
 
画几何图形例子的代码实现
 
形状抽象类和三种子类的形状:
复制代码
   public abstract class Shape
    {
        //形状内部包含了另一个维度:color
        protected IColor color;
        public void SetColor(IColor color)
        {
            this.color = color;
        }
        //设置形状
        public abstract void Draw();
    }

    /// <summary>
    /// 圆形
    /// </summary>
    public class Circle : Shape
    {
        public override void Draw()
        {
            color.Paint("圆形");
        }
    }
    /// <summary>
    /// 长方形
    /// </summary>
    public class Rectangle : Shape
    {
        public override void Draw()
        {
            color.Paint("长方形");
        }
    }
    /// <summary>
    /// 三角形
    /// </summary>
    public class Triangle : Shape
    {
        public override void Draw()
        {
            color.Paint("三角形");
        }
    }
复制代码

颜色接口和三种实现类:

复制代码
   /// <summary>
    /// 颜色接口
    /// </summary>
    public interface IColor
    {
        void Paint(string shape);
    }
    /// <summary>
    /// 蓝色
    /// </summary>
    public class Blue : IColor
    {
        public void Paint(string shape)
        {
            Console.WriteLine($"蓝色的{shape}");
        }
    }
    /// <summary>
    /// 黄色
    /// </summary>
    public class Yellow : IColor
    {
        public void Paint(string shape)
        {
            Console.WriteLine($"黄色的{shape}");
        }
    }
    /// <summary>
    /// 红色
    /// </summary>
    public class Red : IColor
    {
        public void Paint(string shape)
        {
            Console.WriteLine($"红色的{shape}");
        }
    }
复制代码

客户端调用代码:

复制代码
    class Program
    {
        static void Main(string[] args)
        {
            Shape circle = new Circle();
            IColor blue = new Blue();
            circle.SetColor(blue);//设置颜色
            circle.Draw();//画图

            Shape triangle = new Triangle();
            triangle.SetColor(blue);
            triangle.Draw();

            Console.ReadKey();
        }
    }
复制代码

程序运行结果

2.小结

上边例子的类图:

桥接模式的使用场景:

  当系统实现有多个角度分类,每种分类都可能变化时使用。近几年提出的微服务概念采用了桥接模式的思想,通过各种服务的组合来实现一个大的系统。

桥接模式的优点:

  1.实现抽象和具体的分离,降低了各个分类角度间的耦合;

  2.扩展性好,解决了多角度分类使用继承可能出现的子类爆炸问题。

桥接模式的缺点:

  桥接模式的引进需要通过聚合关联关系建立抽象层,增加了理解和设计系统的难度。

おすすめ

転載: www.cnblogs.com/frank0812/p/11280213.html