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; }
        }
    }
}

这个代码方便修改,也可以组合使用。

发布了122 篇原创文章 · 获赞 36 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/qqj3066574300/article/details/103888157
今日推荐