2014-08-28 2 views
2

Я встречался несколько раз, когда кодирование объекта определенным образом может привести к его несогласованному состоянию. Примером может служить question.Значение «объект находится в противоречивом состоянии»

Из-за ответа: Использование шаблона декоратора для создания объектов является плохим, потому что оно оставляет объект в противоречивом состоянии.

Может ли кто-нибудь объяснить мне, например, что означает объект, находящийся в несогласованном состоянии?

ответ

2

Рассмотрите класс ниже, который является классом декоратора для InputStream. Здесь метод close() остается невыполненным. Теперь, если я создам объект этого класса и вызываю его close(), мое предположение будет состоять в том, что поток был закрыт, но на самом деле он не закрыт из-за неполностью реализованного метода close() в классе декоратора.

public class UnClosableDecorator extends InputStream { 

    private final InputStream inputStream; 

    public UnClosableDecorator(InputStream inputStream) { 
     this.inputStream = inputStream; 
    } 

    @Override 
    public int read() throws IOException { 
     return inputStream.read(); 
    } 

    @Override 
    public int read(byte[] b) throws IOException { 
     return inputStream.read(b); 
    } 

    @Override 
    public int read(byte[] b, int off, int len) throws IOException { 
     return inputStream.read(b, off, len); 
    } 

    @Override 
    public long skip(long n) throws IOException { 
     return inputStream.skip(n); 
    } 

    @Override 
    public int available() throws IOException { 
     return inputStream.available(); 
    } 

    @Override 
    public synchronized void mark(int readlimit) { 
     inputStream.mark(readlimit); 
    } 

    @Override 
    public synchronized void reset() throws IOException { 
     inputStream.reset(); 
    } 

    @Override 
    public boolean markSupported() { 
     return inputStream.markSupported(); 
    } 

    @Override 
    public void close() throws IOException { 
     //do nothing 
    } 
} 
Смежные вопросы