2011年12月30日星期五
第9天第5节: 抽象类、接口的实际作用
1. abstract vs interface
2. 模板设计方法(抽象类)
父类为抽象类:定义若干抽象方法,定义一个正常的模板方法,该模板方法调用抽象方法返回值
子类为正常类:实现抽象方法并放回值
主函数类: 创建子类并调用抽象类的模板方法
适合地方: Web开发
abstract class Product
{
public abstract String getName();
public abstract float getPrice();
public String getInfo() {
return "Name: " + this.getName() + "Price: " + this.getPrice();
}
}
class Dog extends Product
{
public String getName() {
return "dog";
}
public float getPrice() {
return 15.0f;
}
}
class Cat extends Product
{
public String getName() {
return "cat";
}
public float getPrice() {
return 25.0f;
}
}
public class testb
{
public static void main ( String args[] ) {
Product d = new Dog();
Product c = new Cat();
System.out.println(d.getInfo());
System.out.println(c.getInfo());
}
}
---------- java ----------
Name: dogPrice: 15.0
Name: catPrice: 25.0
2. 制定标准设计方法(接口类)
父类为接口类:定义若干抽象方法
子类为正常类:实现抽象方法
第三方类: 定义正常方法,该方法使用接口类参数
主函数类: 创建第三方类,并多次调用第三方类的方法,每次调用给以不用的子类为参数
适合地方:接口标准的制定,例如USB标准 interface usb
{
void start();
void end();
}
class printer implements usb
{
public void start () {
System.out.println("printer starts");
}
public void end () {
System.out.println("printer ends");
}
}
class flash implements usb
{
public void start () {
System.out.println("flash starts");
}
public void end () {
System.out.println("flash ends");
}
}
class computer
{
void plugin(usb u) {
u.start();
u.end();
}
}
public class testb
{
public static void main ( String args[] ) {
computer com = new computer();
com.plugin(new flash());
com.plugin(new printer());
}
}
---------- java ----------
flash starts
flash ends
printer starts
printer ends
2.工厂设计模式
父类为接口类:定义若干抽象方法
子类为正常类:实现抽象方法
工厂类: 定义正常方法,该方法根据String类常数放回所创建的子对象的接口类句柄
主函数类: 从工厂获得子对象,并调用该子对象的抽象方法
适合地方:Java开发常用,客户只需了解接口和产品信息描述即可
interface usb
{
void start();
void end();
}
class printer implements usb
{
public void start () {
System.out.println("printer starts");
}
public void end () {
System.out.println("printer ends");
}
}
class flash implements usb
{
public void start () {
System.out.println("flash starts");
}
public void end () {
System.out.println("flash ends");
}
}
class factory
{
public usb getInstance(String name) {
usb f=null;
if ( name.equals("flash")) {
f = new flash();
}else if ( name.equals("printer"))
{
f = new printer();
}
return f;
}
}
public class testb
{
public static void main ( String args[] ) {
factory fac = new factory();
usb f = fac.getInstance("printer");
f.start();
f.end();
}
}
---------- java ----------
printer starts
printer ends
==代理设计模式
设计模式中定义: 为其他对象提供一种代理以控制对这个对象的访问.
为什么要使用Proxy?
1.授权机制 不同级别的用户对同一对象拥有不同的访问权利
2.某个客户端不能直接操作到某个对象,但又必须和那个对象有所互动.
(1)如果那个对象是一个是很大的图片,需要花费很长时间才能显示出来,那么当这个图片包含在文档中时,使用编辑器或浏览器打开这个文档,打开文档必须很迅速,不能等待大图片处理完成,这时需要做个图片Proxy来代替真正的图片.
(2)如果那个对象在Internet的某个远端服务器上,直接操作这个对象因为网络速度原因可能比较慢,那我们可以先用Proxy来代替那个对象.
==适配器设计模式
接口类: 定义了所有可能要在子类中出现的抽象方法
抽象类: dummy实现了所有接口类的方法
子类:extends抽象类并真正实现它自己说关心的方法
订阅:
博文评论 (Atom)
没有评论:
发表评论