1.工厂模式
原理:多态
案例:服装厂:生产服装
分析:需要一个服装厂类:工厂,类中具有生产服装的功能(创建服装对象)服装类(各种):一类服装是一个类需要一个各类服装的父类或接口:可以表示任意类服装
接口可以做为方法的返回类型吗?
接口本身不可以做方法的返回值,只是接口被类实现之后,实现的类可以做为返回值,返回类型就写接口名,返回实现类的实例。
package com.judy.demo;
import java.util.Scanner;
public class FTest {
public static void main(String[] args) {
//创建一个工厂对象
Factory f = new Factory();
Scanner input = new Scanner(System.in);
System.out.println("你要什么衣服");
String kind = input.next();
FuZhuang fz = f.make(kind);
System.out.println(fz);
check(fz);
}
//判断一个FuZhuang引用短袖是什么并调用方法
public static void check(FuZhuang fz) {
if (fz instanceof Tshirt) { //判断fz是否是Tshirt 的一个实例。
Tshirt t = (Tshirt) fz; //fz已经是个实例了,为什么还要强制转换成 Tshirt??
t.fun2();
} else if (fz instanceof KuZi) {
KuZi kz = (KuZi) fz;
kz.fun1();
} else {
System.out.println("没有你要的衣服");
}
}
}
interface FuZhuang {
//成员方法:
public abstract void fun();
}
class KuZi implements FuZhuang {
@Override
public void fun() {
// TODO Auto-generated method stub
System.out.println("生产出一条裤子");
}
public void fun1() {
System.out.println("这是一条裤子");
}
}
class Tshirt implements FuZhuang { //实现服装接口
@Override
public void fun() {
// TODO Auto-generated method stub
System.out.println("生产出一个短袖");
}
public void fun2() {
System.out.println("这是一件短袖");
}
}
class Factory { //判断并生产什么衣服
//判断逻辑方法
public FuZhuang make(String kind) { //接口实现后 作为返回类型,返回接口的实现类
if (kind.equals("短袖")) {
return new Tshirt(); //返回实例
} else if (kind.equals("裤子")) {
return new KuZi();
} else {
return null;
}
}
}
对象 instanceof 实例 判断实例是否是对象的实例。