【设计模式基础(1)】

总述:

一、设计模式:
        经典的设计模式总共23种,是一系列不同的编程模式与代码编写风格,在本人看来就是一个基础构件,一种框架。

二、设计模式的目的:
        在编写软件过程中,程序员面临着来自耦合性,内聚性以及可维护性,可拓展性,重用性,灵活性等多方面的挑战。设计模式是为了让程序(软件),具有更好的可维护性,可拓展性,重用性,灵活性,可靠性,使得程序呈现高内聚,低耦合的特点。

三、设计模式的七大原则(编程时应该遵守的原则,也是设计模式的基础)
    1.单一职责原则
    2.接口隔离原则
    3.依赖倒转原则
    4.里氏转换原则
    5.开闭原则ocp
    6.迪米特法则
    7.合成复用原则

四、设计模式的分类:
        创建类型设计模式(5种):工厂方法;抽象工厂;单列;建造者;原型
        构造型设计模式(7种):适配器;装饰器;代理;外观;桥接;组合;享元
        行为型设计模式(11种):策略;模板方法;观察者;迭代器;责任链;命令;备忘录;状态;访问者;中介者;解释器

五、设计模式七大原则详解:

1、单一职责原则:
        概念:
             对一个类来说,即一个类应该只负责一项职责。(一个职责不等同于一个方法)
             如类A负责两个不同职责:职责1,职责2。当职责1需要变更而改变A时,可能造成职责2执行错误,所以需要将类A的粒度分解为A1,A2

        核心:
             降低类的复杂度,达到一个类只负责一项职责
        特点:
             提高类的可读性,可维护性;降低变更带来的风险
        注:
             一般,要遵守单一职责原则,只有逻辑足够简单,才可以在代码级别违反单一职责原则;只有类中方法足够少,才可以在方法级别保持单一职责原则

{
	public class Responsibility00 {
	    public static void main(String[] args) {
	        Vehicle00 vehicle00 = new Vehicle00();
	        vehicle00.run("摩托");
	        vehicle00.run("汽车");
	        vehicle00.run("飞机");
	        System.out.println("************************************");

	        RoadVehicle00 roadVehicle00 = new RoadVehicle00();
	        roadVehicle00.run("摩托");
	        roadVehicle00.run("汽车");

	        AirVehicle00 airVehicle00 = new AirVehicle00();
	        airVehicle00.run("飞机");
	        System.out.println("***********************************");

	        Vehicle01 vehicle01 = new Vehicle01();
	        vehicle01.run("摩托");
	        vehicle01.run("汽车");
	        vehicle01.runAir("飞机");
	        vehicle01.runWater("潜艇");
	    }
	}
	//**********************************************
	//交通工具类
	/*
    方式3:
	    此修改方法没有对原来的类做大的修改,只是增加方法
	    这里虽然没有在类这个级别上最少单一职责原则,但在方法级别上,仍然是遵守单一职责
    */
	class Vehicle01{
	    public void run(String vehicle){
	        System.out.println(vehicle+"在公路上运行。。。。");
	    }
	    public void runAir(String vehicle){
	        System.out.println(vehicle+"在天空运行。。。。");
	    }
	    public void runWater(String vehicle){
	        System.out.println(vehicle+"在水中运行。。。。");
	    }
	}

	//**********************************************
	//交通工具类
	/*
    方式2:
	    遵守了单一职责原则,但这样做的开销较大,即将类分解,同时修改客户端
	    改进:直接修改DP0P0Vehicle00,改动的代码会比较少
    */

	class WaterVehicle00{
	    public void run(String vehicle){
	        System.out.println(vehicle+"在水中运行。。。。");

	    }
	}

	class AirVehicle00{
	    public void run(String vehicle){
	        System.out.println(vehicle+"在天空运行。。。。");

	    }
	}

	class RoadVehicle00{
	    public void run(String vehicle){
	        System.out.println(vehicle+"在公路上运行。。。。");

	    }
	}
	//***********************************************
	//交通工具类
	/*
    方式1:
	    在方式1的run方法中,违反了单一职责原则,因为不存在飞机公路上运行
	    解决方案:根据交通工具运行的方式不同,分解成不同的类即可
    */

	class Vehicle00{
	    public void run(String vehicle){
	        System.out.println(vehicle+"在公路上运行。。。。");
	    }
	}
}


版权声明:本文为qq_55865959原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。