设计模式《七大原则》

设计模式是快速提升程序猿编程能力的一种方式。

首先是网上的解释如下:

1. 单一职责原则
每一个类应该专注于做一件事情。
2. 里氏替换原则
父类存在的地方,子类是可以替换的。
3. 依赖倒置原则
实现尽量依赖抽象,不依赖具体实现。高层模块不应该直接依赖于低层模块,高层模块和低层模块应该同时依赖一个抽象层。
4. 接口隔离原则
应当为客户端提供尽可能小的单独的接口,而不是提供大的总的接口。
5. 迪米特法则
又叫最少知识原则,一个软件实体应当尽可能少的与其他实体发生相互作用。
6. 开闭原则
面向扩展开放,面向修改关闭。
7. 组合/聚合复用原则
尽量使用合成/聚合达到复用,尽量少用继承。原则: 一个类中有另一个类的对象。

 

 

自己的解释如下:

 

单一职责原则:

潜台词:专注做一个事,做自己的事,不受别人影响。

理解:只负责我的事,专注干好自己的东西。 MVC框架

 

好处:

提高可读性,一个功能一个类

出现BUG时可以缩小出错的范围,定位准确。减少加班

修改逻辑时减少失误,假如你要增加产品价格,结果增加到boss的爆率上了。

 

里式替换原则:

潜台词:父类不在可以用儿子替代。

理解:工厂模式中一样,返回类型是父类,但是new的却是儿子们

 

好处就不用说了。直接上代码

public abstract class  Phone
{
    public abstract void Call();
}
 interface Android{ }
 interface IOS{ }

public class OnePlus : Phone, Android
{
    public override void Call()
    {
        Debug.Log($"{nameof(OnePlus)}进行通话。。。。。");
    }
}

public class Pixel : Phone, Android
{
    public override void Call()
    {
        Debug.Log($"{nameof(Pixel)}进行通话。。。。。");
    }
}
public class XiaoMi : Phone, Android
{
    public override void Call()
    {
        Debug.Log($"{nameof(XiaoMi)}进行通话。。。。。");
    }
}

public class Apple : Phone, IOS
{
    public override void Call()
    {
        Debug.Log($"{nameof(Apple)}进行通话。。。。。");
    }
}

//****************************************************
//-----不使用里氏替换原则,需要一个个调用
  public void WantToCall_0(OnePlus phone)
    {
        phone.Call();
    }

    public void WantToCall_1(Pixel phone)
    {
        phone.Call();
    }

    public void WantToCall_2(XiaoMi phone)
    {
        phone.Call();
    }

    public void WantToCall_3(Apple phone)
    {
        phone.Call();
    }
//****************************************************
//----使用里式替换原则
 public void WantToCall_4(Phone phone)
    {
        phone.Call();
    }

依赖倒置原则:

潜台词:抽象不应该依赖细节;细节应该依赖抽象。 依赖倒置原则的核心思想是面向接口编程。

理解:华硕和微型都可使用不同型号的显卡,反之不同型号的显卡也可以使用在不同品牌的主板上,我理解成外观模式那样, 模块化编程,

//显卡
public interface IGraphicsCard
{
    void BeginWork(IMainboard mainboard);
}
//主板
public interface IMainboard
{
    void GetElectricity();
    void DrawPicture(IGraphicsCard graphicsCard);
}


public class NVIDIA_2018Ti : IGraphicsCard
{
    public NVIDIA_2018Ti(IMainboard mainboard)
    {
        BeginWork(mainboard);
    }
    public void BeginWork(IMainboard mainboard)
    {
        mainboard.GetElectricity();
        Debug.Log($"NVIDIA_2018Ti获取{mainboard.GetType()}电量后开始工作");
    }
}
public class NVIDIA_2018 : IGraphicsCard
{
    public NVIDIA_2018(IMainboard mainboard)
    {
        BeginWork(mainboard);
    }
    public void BeginWork(IMainboard mainboard)
    {
        mainboard.GetElectricity();
        Debug.Log($"NVIDIA_2018获取{mainboard.GetType()}电量后开始工作");
    }
}

//华硕主板
public class Asus : IMainboard
{
    public void DrawPicture(IGraphicsCard graphicsCard) { }
    public void GetElectricity() { }
}
//微型主板
public class MSI : IMainboard
{
    public void DrawPicture(IGraphicsCard graphicsCard) { }
    public void GetElectricity() { }
}

//-----绘制
    public void DrawPicture()
    {
        IMainboard aSus = new Asus();
        aSus.DrawPicture(new NVIDIA_2018Ti(aSus));
        aSus.DrawPicture(new NVIDIA_2018(aSus));

        IMainboard mSI = new MSI();
        mSI.DrawPicture(new NVIDIA_2018Ti(mSI));
        mSI.DrawPicture(new NVIDIA_2018(mSI));
    }

接口隔离原则:

潜台词:定义的接口尽量按照功能细分

理解:比如手机,微信是一个接口,打电话一个接口,发短信一个接口,听歌是一个接口,注意和单一职责原则分开,一个是接口,一个是普通class类

 

迪米特原则:

潜台词:能用 private、protected的就不要用public,不要过多的暴露自己的内容,而且对应类与类之间的关系,尽量越少越好

理解:就是减少耦合,比如一个公司,销售部和市场部直接沟通,不关心销售部内部的人员以及解决方式,直接把问题提交给你就行了。 以后 讲到【门面模式】和【中介者模式】会详细讲解的。

好处:还是低耦合,强调类之间的耦合性,耦合性越低,那么工程的可修改性和可扩充性会大大提升。

开闭原则:

潜台词:对扩展开放,对修改封闭

理解:有新需求的时候,直接对现有代码进行扩展,而不用改变已经编写好的代码。详见【工厂模式】

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值