java[15]抽象类 、模板设计模式、装饰设计模式。

抽象类 :

作用:解决父类方法的不确定性 :让子类实现抽象方法


//抽象类  abstract 修饰 
abstract class Animal{
	String name;
	int age;
	//抽象方法
	abstract public void cry();
	
	
}

class Cats extends Animal{
	public void cry(){
		//当一个类继承的是父类是抽象类的话
		//需要将父类中的所有抽象方法都实现
		System.out.println("miaomiao");
		
		
	}
	
	
}

注意:

  1. 抽象类是不完整的类,不能够被实例化;
  2. 抽象类可以没有abstrac方法,
  3. 一旦类中包含有abstract方法,则必须声明为abstract类;
  4. 抽象方法不能有主体;

模板设计模式:让类中的方法空出来实现多态,比如统计程序的运行时间:

模版设计模式概述

•模版方法模式就是定义一个算法的骨架,而将具体的算法延迟到子类中来实现l优点

•使用模版方法模式,在定义算法骨架的同时,可以很灵活的实现具体的算法,满足用户灵活多变的需求

缺点

•如果算法骨架有修改的话,则需要修改抽象类

父类中定义抽象方法:

import java.sql.Time;

public abstract class gettime {
	
	
	public long  get_time() {
		long start = System.currentTimeMillis();
		
		foo();
		long end = System.currentTimeMillis();
		
		return end - start;
	}
	abstract void foo();

}

子类中定义程序:

public class fortime extends gettime {

	@Override
	void foo() {
		// TODO Auto-generated method stub
		for (int i=0;i<10000;i++) {
			System.out.println(i);
		}
	}

}

使用:

public class TEST3 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		gettime a  = new fortime();
		System.out.println(a.get_time());
	}

}

装饰设计模式:

装饰设计模式概述

•装饰模式就是使用被装饰类的一个子类的实例,在客户端将这个子类的实例交给装饰类。是继承的替代方案

优点

使用装饰模式,可以提供比继承更灵活的扩展对象的功能,它可以动态的添加对象的功能,并且可以随意的组合这些功能

缺点

正因为可以随意组合,所以就可能出现一些不合理的逻辑

public interface phone {
	public abstract void call();
}
public class iphone implements phone {

	@Override
	public void call() {
		// TODO Auto-generated method stub
		System.out.println("可以打电话了");

	}

}

定义装饰:

public abstract class phonedecorate implements phone {
	private phone p;
	public phonedecorate(phone p) {
		this.p = p;
		
	}
	@Override
	public void call() {
		// TODO Auto-generated method stub
		this.p.call();
	}

}

子类:(根据需求创建可定义多个)

public class ringphonedecorate extends phonedecorate {

	public ringphonedecorate(phone p) {
		super(p);
		// TODO Auto-generated constructor stub
	}
	@Override
	public void call() {
		// TODO Auto-generated method stub
		System.out.println("听手机铃声");
		super.call();
	}
}
public class musicphonedecorate extends phonedecorate {

	public musicphonedecorate(phone p) {
		super(p);
		// TODO Auto-generated constructor stub
	}
	@Override
	public void call() {
		// TODO Auto-generated method stub
		
		super.call();
        System.out.println("listen music");
	}
}

调用:

public class test1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		iphone p = new iphone();
		phonedecorate pd = new ringphonedecorate(p);
		pd.call();
		
		phonedecorate pd2 = new musicphonedecorate(p);
		pd2.call();
		System.out.println("~~~~~~~~");
		// 装饰器
		//装饰模式可对装饰进行整合
		pd = new ringphonedecorate( new musicphonedecorate(p));
		pd.call();
	}

}


//输出:
听手机铃声
可以打电话了
可以打电话了
listen music ~~~~~~~~
听手机铃声
可以打电话了
listen music 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值