Java基础7(解耦、引入工厂模式、代理设计模式、适配器设计模式、内部类)

类设计的注意事项:类的设计主要是父类的设计

子类最好不要继承一个已经完全实现的类,因为一旦发达向上转型,所调用的方法,一定是被子类覆盖过的方法,所以只会继承抽象类和接口。

解耦

耦合度是什么?

两个对象之间相互依赖的程度,是衡量代码独立性的一个指标。

软件开发追求高/低耦合度?

软件开发追求低耦合度

怎么才能降低代码的耦合度?

降低代码的耦合度是一个非常重要的实践,它有助于提高代码的可维护性、可读性和可扩展性。

引入工厂模式:

解决解耦

代理设计模式(静态代理):

扩展性,同时保护核心功能,提示代码安全性和健壮性

适配器设计模式:

在继承借口时,就必须全部实现接口中的方法,这样很多用不到的也要实现很麻烦,所以就有适配类的出现,即用一个抽象类并用抽象类里的空方法体来实现接口中的所有方法,然后从这个抽象类中继承,就可以有选择的实现相关方法

内部类

内部类:也会生成自己独立class文件,命名的规则是outname$innername

内部类可以直接访问外部类的私有变量

第一种:依赖外部类,定义一个创建内部类的方法

class JavaDemo
{
	public static void main(String[] args) 
	{
		Outter out  = new Outter();
		//第一种:依赖外部类,定义一个创建内部类的方法
		Outter.Inner in = out.getInner();
		System.out.println(in);
		
	}
}

class Outter
{
	private static int number = 10;
	public void testOut(){
		System.out.println("outter");
	}
	//内部类:也会生成自己独立的class文件,命名的规则是outname$innername
	static class Inner
	{
		public void testInner(){
			System.out.println("inner"+number);
		}
	}

	public Inner getInner(){
		Inner in =  new Inner();
		return in;
	}
}

第二种:依赖外部类的实例,然后利用out.new        Inner();

class JavaDemo
{
	public static void main(String[] args) 
	{
		Outter out  = new Outter();
		
		//第二种:依赖外部类的实例,然后利用out1.new Inner();
		Outter out1 = new Outter();
		Outter.Inner in1 = out1.new Inner();
		System.out.println(in1);
		in1.testInner();
		
	}
}

class Outter
{
	private static int number = 10;
	public void testOut(){
		System.out.println("outter");
	}
	//内部类:也会生成自己独立的class文件,命名的规则是outname$innername
	static class Inner
	{
		public void testInner(){
			System.out.println("inner"+number);
		}
	}

	public Inner getInner(){
		Inner in =  new Inner();
		return in;
	}
}

静态内部类创建:new        Outter.Inner(),静态内部只能访问静态变量

class JavaDemo
{
	public static void main(String[] args) 
	{
		Outter out  = new Outter();
		
		
		//静态内部类创建:new Outter.Inner(),静态内部类只能访问静态变量
		Outter.Inner in2 = new Outter.Inner();
		System.out.println(in2);
		in2.testInner();
	}
}

class Outter
{
	private static int number = 10;
	public void testOut(){
		System.out.println("outter");
	}
	//内部类:也会生成自己独立的class文件,命名的规则是outname$innername
	static class Inner
	{
		public void testInner(){
			System.out.println("inner"+number);
		}
	}

	public Inner getInner(){
		Inner in =  new Inner();
		return in;
	}
}

匿名内部类:没有名字,编译成class,系统会默认使用1、2、3等作为名字

类可以定义在函数类

class JavaDemo 
{
    public static void main(String[] args) 
    {
        System.out.println("Hello World!");
        new AA(){ //1、定义类  2、实现接口 3、创建实例  new  AA()
            public void testAA(){
                System.out.println("testAA");
            }
        }.testAA();
    }
}

interface AA
{
    void testAA();
}

你可能感兴趣的:(java)