設計一個攝影師的類,該類中只有一個方法,photograph方法,該方法有2個參數,第一個參數表示拍照的工具,第2個參數表示拍攝的對象。
拍照的工具,可以是手機,也可以是相機,也可以是平板,可以是數碼相機,也可以是傻瓜式膠捲相機,(設置一個接口Photographable),
拍攝的對象可以是桌子,椅子,風景,人,花草等,(設置一個接口Target)
。
//class Target Photographable
//概念上的接口,系統對外提供的所有服務,類的所有能被外部使用者訪問
//的方法構成了類的接口
//interface定義的接口,明確地描述了系統對外提供的所以服務,能夠
//更清晰地把系統的實現細節和接口分離
public interface Photographable
{
// public void takePhoto();
public void takePhoto(Target target);
}
//class CellPhone
/**
手機父類,普通手機
*/
class CellPhone
{
protected String brand;
public CellPhone()
{
}
public CellPhone(String brand)
{
this.brand=brand;
}
public void call() //打電話
{
}
public void sendMessage() //發短信
{
}
public void receiveMessage() //收短信
{
}
}
//class Commonphone
class CommonPhone extends CellPhone
{
}
class SuperPhone extends CellPhone implements Photographable
{
public SuperPhone()
{
}
public SuperPhone(String brand)
{
super(brand);
}
public void takePhoto(Target target)
{
System.out.println("SuperPhone "+brand+" take photos of "+target.getOutlook());
}
}
//class Camera
public abstract class Camera implements Photographable
{
protected String brand;
public Camera()
{
}
public Camera(String brand)
{
this.brand=brand;
}
}
//class DigitalCamera
public class DigitalCamera extends Camera
{
public DigitalCamera()
{
}
public DigitalCamera(String brand)
{
super(brand);
}
public void takePhoto(Target target)
{
System.out.println("Digital Camera "+brand+" take photos of "+target.getOutlook());
}
public void ViewPhoto()
{
}
public void deletePhoto()
{
}
}
//class OpticalCamera
pubic class OpticalCamera extends Camera
{
public OpticalCamera()
{
}
public OpticalCamera(String brand)
{
super(brand);
}
public void takePhoto(Target target)
{
System.out.println("Optical Camera "+brand+"take photos of "+target.getOutlook());
}
}
//interface Target
public interface Target
{
public String getOutlook();
}
//class Person
class Person implements Target
{
public String getOutlook()
{
return "a very beautiful or handsome person";
}
}
//class Flower
class Flower implements Target
{
public String getOutlook()
{
return "a very beautiful flower";
}
}
//class Photographer
class Photographer
{
public void photograph(Photographable tool,Target target)
{
tool.takePhoto(target);
}
}
//class Demo04
class Demo04
{
public static void main(String args[])
{
Photographable ph01=new SuperPhone("HTC");
Photographable ph02=new DigitalCamera("Cannon");
Target target01=new Flower();
Target target02=new Person();
Photographer pher=new Photographer();
pher.photograph(ph01,target01);
pher.photograph(ph02,target02);
}
}