关于开放封闭原则,其核心的思想是:
软件实体应该是可扩展,而不可修改的。也就是说,对扩展是开放的,而对修改是封闭的。
因此,开放封闭原则主要体现在两个方面:
对扩展开放,意味着有新的需求或变化时,可以对现有代码进行扩展,以适应新的情况。
对修改封闭,意味着类一旦设计完成,就可以独立完成其工作,而不要对类进行任何修改。
封装抽象不是目的,目的是封装变化
下面一个银行的业务 需求:
用户 的需求只有 存钱 取钱
银行柜台 接待客户,接受 用户的操作
银行系统 柜台人员使用 电脑上的银行系统软件 进行 存钱 取钱
具体实现代码 如下:
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();
-
- }
- }
- }