设计模式基础之开闭原则

设计模式

设计模式23式

(一)了解设计模式给程序设计带来的好处

(二)创建型模式:熟练掌握(简单工厂,工厂方法,抽象,单利模式,建造者模式,原型模式)

(三)结构性模式:适配器模式,装饰器模式,代理模式,外观模式,桥接模式,组合模式,享元模式,

(四)行为模式:策略模式,模板方法模式,观察者模式,迭代子模式,责任链模式,命令模式,备忘录模式,状态模式,访问者模式中介者模式,解释器模式。

软件设计原则

(1)可复用

软件的某一些类库可以在不同的软件中使用,这样可以大大的提高了开发的效率。

(2)可维护性

只得是需求有变化的给软件增减一些功能,只是需要修改一些想修改的地方,而其他的地方又不受影响,这样就可以达到了减少软件的重新测试时间。

(3)可扩展性

指的是软件可以扩展性,有好的优势是可以通过插件的形式提供对本身的功能进行扩展。

六大原则

(1)单一原则

例如:每一个对象都应该实现相对应的单一职责,如果不是的话,就应该把这个类给拆分了。(理解案例:数据库代码功能,用户代码功能,这两个不相同,所以就是得把他们给拆分实现相对应的职责)

1.单一原则:就是一个类只有一个实例,并且提供一个访问它的全局访问点。

(2)里氏替换原则

抽象不依赖细节,细节依赖于抽象

例如:你想回家,而你回家的方式有很多种,走路回家,骑自行车回家,坐车回家等等很多种,而你的目的,就是回家,而你回家的方式是由自己决定的,而做软件的时候,你想把一个功能给实现,但是也可以使用很多的方法是一样的。

(3)依赖倒转原则

定义:依赖倒置原则包含三个含义

(1)高层模块不应该依赖底层模块,两者都应该依赖其抽象

(2)抽象不应该依赖细节

(3)细节应该依赖抽象

依赖倒置原则在Java中的实现是表现是:

(1)模块间的依赖是通过抽象发生的,实现类之间不发生直接依赖关系,其依赖关系是通过接口或者是抽象类产生的。

(2)接口和抽象不依赖于实现类

(3)实现类依赖接口和抽象类

遵循原则:

(1)每个类都要尽量有一个接口或者是一个抽象类

(2)变量的表面类型尽量是接口或者抽象类

(3)任何类都不应该从具体类派生

(4)尽量不要写基类是一个抽象类,而且这个方法已经实现了,子类尽量不要复写

(5)接口负责的定义是public属性和方法,并且声明与其他对象的依赖关系,抽象类负责公共构造部分的实现,实现类准确的实现业务逻辑

(4)接口隔离原则

每一个接口中不存在子类用不到的,但是有必须要实现的方法(理解:今天自己不想吃饭,但是自己又不得不吃饭),如果不是的话,那就将它的接口拆分,使用多种隔离的接口(理解:如果今天自己不想吃饭,但是你可以选择吃水果,吃牛排,吃鸡肉等等之类)。

每一个接口中不存在子类用不到的,但是有必须要实现的方法(理解:今天自己不想吃饭,但是自己又不得不吃饭),如果不是的话,那就将它的接口拆分,使用多种隔离的接口(理解:如果今天自己不想吃饭,但是你可以选择吃水果,吃牛排,吃鸡肉等等之类)。

(5)迪米特法则

(1)最好的理解就是降低各个模块之间的耦合

(6)开发封闭原则

(1)软件的实体(类,模块,函数.....)可以在它们的基础上进行扩张是开发的,但是对于更改他们原有的代码是封闭的。

小案例:

//操作类
public abstract class Operation
{
    public int numberA;
    
    public int numberB
    
    public abstract int GetResult();
    
}

//减的方法
public class AddOperation:Operation
{
    public override int GetResult()
    {
        return (this.numberA + this.numberB);
    }
}

//加的方法
public class SubOperation:Operation
{
    public override int GetResult()
    {
        return (this.numberA - this.numberB);
    }
}

//简单工厂
public class SimpleFactory
{
     public static Operation CreateOperation(string operation)
     {
            Operation o = null;
            switch (operation)
            {
                case "+":
                    o = new AddOperation();
                    break;
                case "-":
                    o = new SubOperation();

                    break;
                          return o;
        }
    }
static void Main(string[] args)
{
	Operation operation1 = c SimpleFactory.CreateOperation("+");

            operation1.numberA = 10;

            operation1.numberB = 20;

            Console.WriteLine("{0}+{1}={2}", operation1.numberA, operation1.numberB, operation1.GetResult());

            Operation operation2 = SimpleFactory.CreateOperation("-");

            operation2.numberA = 10;

            operation2.numberB = 20;

            Console.WriteLine("{0}-{1}={2}", operation2.numberA, operation2.numberB, operation2.GetResult());

            Console.Read();
            }

说明:这个只是其中的一部分内容而已,过后小编还会把一些剩余的内容给补上。

猜你喜欢

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