以下是例题:
以下类都在同一包中:
package ch13.day0802.lx.lx02;
public class Test {
public static void main(String[] args) {
Customer customer=new Customer();
Factory factory=new Factory();
customer.getPrinter(factory.generate(1));
customer.getPrinter(factory.generate(2));
customer.getPrinter(factory.generate(3));
}
}
结果为:
针式打印机--打印速度慢,效果差,噪音高
喷墨打印机--打印速度一般,效果一般,噪音一般
激光打印机--打印速度快,效果好,噪音低
package ch13.day0802.lx.lx02;
public class Customer {
public void getPrinter(Printer p) {
// Factory factory=new Factory();
// Printer p=factory.generate(type);
if(p instanceof DotMatrixPrinter) {
((DotMatrixPrinter) p).matrix();
}else if(p instanceof InkpetPrinter) {
((InkpetPrinter)p).colcr();
}else if(p instanceof LaserPrinter) {
((LaserPrinter)p).laser();
}
}
}
package ch13.day0802.lx.lx02;
public class Factory {
public Printer generate(int i) {
Printer p=null;
if(i==1) {
p=new DotMatrixPrinter("慢","差","高");
}else if(i==2) {
p=new InkpetPrinter("一般","一般","一般");
}else if(i==3) {
p=new LaserPrinter("快","好","低");
}
return p;
}
}
package ch13.day0802.lx.lx02;
public class DotMatrixPrinter extends Printer {
@Override
public void print() {
System.out.println("针式打印机--打印速度"+this.getSpeed()+",效果"+this.getEffect()+",噪音"+this.getNoise());
}
public void matrix() {
System.out.println("核心打印技术:点阵系列");
}
//构造方法
public DotMatrixPrinter() {}
public DotMatrixPrinter(String speed, String effect, String noise) {
super(speed,effect,noise);
}
}
package ch13.day0802.lx.lx02;
public class InkpetPrinter extends Printer {
@Override
public void print() {
System.out.println("喷墨打印机--打印速度"+this.getSpeed()+",效果"+this.getEffect()+",噪音"+this.getNoise());
}
public void colcr() {
System.out.println("核心打印技术:五颜六色");
}
//构造方法
public InkpetPrinter() {}
public InkpetPrinter(String speed, String effect, String noise) {
super(speed,effect,noise);
}
}
package ch13.day0802.lx.lx02;
public class LaserPrinter extends Printer {
@Override
public void print() {
System.out.println("激光打印机--打印速度"+this.getSpeed()+",效果"+this.getEffect()+",噪音"+this.getNoise());
}
public void laser() {
System.out.println("核心打印技术:激光技术");
}
//构造方法
public LaserPrinter() {}
public LaserPrinter(String speed, String effect, String noise) {
super(speed,effect,noise);
}
}
package ch13.day0802.lx.lx02;
public abstract class Printer {
private String speed;
private String effect;
private String noise;
public abstract void print();
//构造方法
public Printer(){}
public Printer(String speed, String effect, String noise) {
super();
this.speed = speed;
this.effect = effect;
this.noise = noise;
}
//get set
public String getSpeed() {
return speed;
}
public void setSpeed(String speed) {
this.speed = speed;
}
public String getEffect() {
return effect;
}
public void setEffect(String effect) {
this.effect = effect;
}
public String getNoise() {
return noise;
}
public void setNoise(String noise) {
this.noise = noise;
}
}