关于开放封闭原则,其核心的思想是:
软件实体应该是可扩展,而不可修改的。也就是说,对扩展是开放的,而对修改是封闭的。
因此,开放封闭原则主要体现在两个方面:
对扩展开放,意味着有新的需求或变化时,可以对现有代码进行扩展,以适应新的情况。
对修改封闭,意味着类一旦设计完成,就可以独立完成其工作,而不要对类进行任何修改。
封装抽象不是目的,目的是封装变化
下面一个银行的业务 需求:
用户 的需求只有 存钱 取钱
银行柜台 接待客户,接受 用户的操作
银行系统 柜台人员使用 电脑上的银行系统软件 进行 存钱 取钱
具体实现代码 如下:
1.1封装一个接口 用于 处理 银行的 业务。根据客户 需求而定,客户需求只有 存钱和取钱,如有其他业务 可进行扩展
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 开闭职责.开发封闭原则.interfaceClassify
{
public interface InterfaceBankSystem
{
void SpecificBusiness();
}
}
1.2存钱的需求 实现 银行的业务接口1.1
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using 开闭职责.开发封闭原则.interfaceClassify;
namespace 开闭职责.开发封闭原则.classClassify
{
public class SaveMoneyClass : InterfaceBankSystem
{
public void SpecificBusiness()
{
Console.WriteLine("用户存钱");
}
}
}
1.3取钱的需求 实现 银行的业务接口1.1
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using 开闭职责.开发封闭原则.interfaceClassify;
namespace 开闭职责.开发封闭原则.classClassify
{
public class DrawMoneyClass : InterfaceBankSystem
{
public void SpecificBusiness()
{
Console.WriteLine("用户取钱");
}
}
}
2.1封装一个 客户需求接口类,返回 银行业务接口;客户只有 存钱和取钱
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 开闭职责.开发封闭原则.interfaceClassify
{
public interface InterfaceCustomerDemand
{
InterfaceBankSystem GetBusiness();
}
}
2.2存钱的需求 实现 客户需求接口类2.1
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using 开闭职责.开发封闭原则.interfaceClassify;
namespace 开闭职责.开发封闭原则.classClassify
{
public class SaveMoneyCustomerDemandrClass : InterfaceCustomerDemand
{
public InterfaceBankSystem GetBusiness()
{
return new SaveMoneyClass();
}
}
}
2.3取钱的需求 实现 客户需求接口类2.1
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using 开闭职责.开发封闭原则.interfaceClassify;
namespace 开闭职责.开发封闭原则.classClassify
{
public class DrawMoneyCustomerDemandClass : InterfaceCustomerDemand
{
public InterfaceBankSystem GetBusiness()
{
return new DrawMoneyClass();
}
}
}
3.实现 银行柜台接待用户的业务
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using 开闭职责.开发封闭原则.interfaceClassify;
namespace 开闭职责
{
public class BankCounter
{
public void Operate(InterfaceCustomerDemand interfaceBankCounter)
{
interfaceBankCounter.GetBusiness().SpecificBusiness();
}
}
}
4.实现调用
using 开闭职责.开发封闭原则.classClassify;
using 开闭职责.开发封闭原则.interfaceClassify;
namespace 开闭职责
{
internal class Program
{
static void Main(string[] args)
{
InterfaceCustomerDemand interfaceBankCounter = new DrawMoneyCustomerDemandClass();//SaveMoneyCounterClass();
BankCounter bankCounter = new BankCounter();
bankCounter.Operate(interfaceBankCounter);
Console.ReadKey();
}
}
}