1.定义
提供一个接口,使得客户端只通过接口访问。隐藏内部子系统的实现。
2.例子
2.1 抽象出API方法,并实现
public abstract class NokiaPhone {
public abstract void design();
public abstract void development();
public abstract void production();
}
public class NokiaPhoneImpl extends NokiaPhone{
private Software software = new SoftwareImpl();
private Hardware hardware = new HardwareImpl();
private Production production = new ProductionImpl();
@Override
public void design() {
hardware.design();
software.design();
}
@Override
public void development() {
hardware.development();
software.development();
}
@Override
public void production() {
hardware.test();
software.test();
production.production();
}
}
最高层接口就是为了统一API,客户端调用只需要调用设计,开发和生产三个方法举行了,具体内部实现无须关注。具体的实现由内部的子系统去完成。
2.2 子系统
硬件部
public interface Hardware {
public void design();
public void development();
public void test();
}
public class HardwareImpl implements Hardware {
private static final String TAG = HardwareImpl.class.getSimpleName();
@Override
public void design() {
Log.d(TAG,"design");
}
@Override
public void development() {
Log.d(TAG,"development");
}
@Override
public void test() {
Log.d(TAG,"test pass");
}
}
软件部
public interface Software {
public void design();
public void development();
public void test();
}
public class SoftwareImpl implements Software{
private static final String TAG = SoftwareImpl.class.getSimpleName();
@Override
public void design() {
Log.d(TAG,"design");
}
@Override
public void development() {
Log.d(TAG,"development");
}
@Override
public void test() {
Log.d(TAG,"test pass");
}
}
生产部
public interface Production {
public void production();
}
public class ProductionImpl implements Production {
private static final String TAG = ProductionImpl.class.getSimpleName();
@Override
public void production() {
Log.d(TAG,"production nokia");
}
}
2.3开始调用
NokiaPhoneImpl nokiaPhoneImpl = new NokiaPhoneImpl();
nokiaPhoneImpl.design();
nokiaPhoneImpl.development();
nokiaPhoneImpl.production();