2016-01-03 2 views
0

Я читал книгу моделей GoF, и мне интересно, будут ли использовать генерики для достижения тех же результатов, что и использование обычной реализации клонирования прототипа. Возможно, я неправильно понимаю шаблон прототипа, поэтому дайте мне знать, если что-то происходит, это не образец прототипа.Шаблон прототипа с дженериками вместо клонируемого

Насколько я понимаю, прототип шаблона в основном вместо создания разных фабрик для разных подклассов u передает подкласс на фабрику в конструкторе, чтобы он создавал подклассы из этого чертежа.

В приведенном ниже примере Я установил тип объектов, которые эта фабрика должна возвращать как общий и создать экземпляр при вызове товара.

Пример:

public class PrototypedFactory { 
    Prototype prototype; 

    public PrototypedFactory(Prototype prototype) { 

     this.prototype = prototype; 
    } 

    public Prototype makeItem() throws CloneNotSupportedException { 
     return (Prototype) prototype.clone(); 

    } 

    public static void main(String[] args) throws Exception { 
     GenericFactory<ConcretePrototype> factoryGeneric = new GenericFactory<ConcretePrototype>(
       ConcretePrototype.class); 
     PrototypedFactory factory = new PrototypedFactory(new ConcretePrototype()); 

     Prototype item = factory.makeItem(); 
     Prototype item2 = factoryGeneric.makeItem(); 
     System.out.println(item.getName()); 
     System.out.println(item2.getName()); 
    } 

} 

GenericFactory:

public class GenericFactory<T extends Prototype> { 
    Class<T> c; 

    public GenericFactory(Class<T> clazz) { 
     c = clazz; 
    } 

    public Prototype makeItem() throws Exception { 
     return c.newInstance(); 
    } 

} 

Прототип

public abstract class Prototype implements Cloneable { 
    String name = "prototype"; 

    @Override 
    public Object clone() throws CloneNotSupportedException { 
     return super.clone(); 
    } 

    public String getName() { 
     return name; 
    } 
} 

ответ

1

Идея прототипа является то, что вы можете настроить объект-прототип так, как вы хотите, и вам «Всегда получаю идеальные копии. Вы не можете достичь этого с помощью дженериков, поэтому необходим подход, подобный клонированию.

Он также не имеет ничего общего с подклассами в чистом виде. Вы смешиваете фабрики и прототипы.

0

Вы создали заводской завод, который может создавать объекты общего типа, с которыми он инициализирован. Таким образом, ваш дизайн является улучшением по сравнению с созданием нескольких фабричных классов для нескольких типов объектов, которые должны быть клонированы, - теперь создаем несколько типов объектов с использованием одного и того же фабричного класса.

Его завод, который является общим. Прототипирование не было достигнуто с помощью дженериков.

Образец прототипа, с другой стороны, сконцентрирован на , как создавать копии объектов из существующих объектов путем клонирования. Заводы просто дают нам элегантный способ создания этих клонов.

Если все еще неясно, вы можете ссылаться на статью, написанную мной на образце Prototype в своем блоге - http://www.javabrahman.com/design-patterns/prototype-design-pattern-in-java/.

Смежные вопросы