Principle Of Composite Reuse(合成複用原則)

(一)合成服用原則定義

軟件複用時,儘量先使用組合或者聚合關聯關係來實現,次之考慮使用繼承關係實現。

(二)繼承複用

  1. 破壞封裝,繼承就會將父類的實現細節暴露給子類(稱爲白箱複用)
  2. 子類與父類的耦合性高,父類的實現和改變都能改變子類的變化,不利於類的擴展與維護。
  3. 限制了複用的靈活性

(三)合成複用(合成複用的好處,新對象可以調用已有對象的功能)

  1. 維持類的封裝性(稱爲黑箱複用)
  2. 新舊類之間的耦合度低
  3. 複用的靈活性高

(四)圖形解析

 如上圖,人類的子類是男人和女人,男人和女人都有各自的屬性,如果現在想多加一個屬性的話,那麼就得修改代碼,這樣就違背了開閉原則,如果使用組合關係的方法,就能很好的處理該問題。如下圖:

(五)代碼解析

using System;

namespace Design_Pattern
{
    class Program
    {
        static void Main(string[] args)
        {

        }

        /// <summary>
        /// 人類接口
        /// </summary>
        public interface People
        {

        }

        /// <summary>
        /// 男人
        /// </summary>
        public class Man
        {
            /// <summary>
            /// 姓名
            /// </summary>
            public String Name { get; set; }

            /// <summary>
            /// 身份證
            /// </summary>
            public String Identity { get; set; }

            /// <summary>
            /// 出生日期
            /// </summary>
            public String Birth { get; set; }

            /// <summary>
            /// 家庭住址
            /// </summary>
            public String Address { get; set; }
        }

        /// <summary>
        /// 女人
        /// </summary>
        public class Woman
        {
            /// <summary>
            /// 姓名
            /// </summary>
            public String Name { get; set; }

            /// <summary>
            /// 身份證
            /// </summary>
            public String Identity { get; set; }

            /// <summary>
            /// 出生日期
            /// </summary>
            public String Birth { get; set; }

            /// <summary>
            /// 家庭住址
            /// </summary>
            public String Address { get; set; }
        }


    }
}

這個是原來圖一的,圖二的解析如下:

using System;

namespace Design_Pattern
{
    class Program
    {
        static void Main(string[] args)
        {

        }

        /// <summary>
        /// 人類接口
        /// </summary>
        public interface People
        {

        }

        /// <summary>
        /// 男人
        /// </summary>
        public class Man
        {
           
        }

        /// <summary>
        /// 女人
        /// </summary>
        public class Woman
        {
          
        }

        public class Attribute
        {
            /// <summary>
            /// 姓名
            /// </summary>
            public String Name { get; set; }

            /// <summary>
            /// 身份證
            /// </summary>
            public String Identity { get; set; }

            /// <summary>
            /// 出生日期
            /// </summary>
            public String Birth { get; set; }

            /// <summary>
            /// 家庭住址
            /// </summary>
            public String Address { get; set; }
        }
    }
}

這個代碼方便修改,也可以組合使用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章