Возможно ли иметь однотонный заводский метод? У меня много доменов, использующих фабричный метод. Как мне работать с этим. Пожалуйста, помогите мне с примером.Singleton Factory method
ответ
Implementing the Singleton Pattern in Java: «... создать интерфейс для объектов, которые создают экземпляры класса Singleton. Это, по сути, комбинация шаблонов Abstract Factory, Factory Method и Functor в книге GoF».
/**
* An interface defining objects that can create Singleton
* instances.
*/
public interface SingletonFactoryFunctor {
/**
* @return An instance of the Singleton.
*/
public Singleton makeInstance();
}
Вы должны назвать свой SingletongetInstance()
метод из фабричного метода. Логика getInstance()
должна обрабатывать детали возврата одного экземпляра Singleton.
Singleton можно реализовать как:
public class Singleton {
private static Singleton mInstance;
private Singleton(){}
public static Singleton getInstance()
{
if(mInstance==null){
mInstance=new Singleton();
}
return mInstance;
}
}
Этот класс вы можете вернуться в любой завод Methode вы хотите, как mepcotterell описано выше.
В этом примере, я считаю, вы хотели бы синхронизировать свой метод getInstance(), чтобы гарантировать, что два потока одновременно не вводят его. В противном случае два потока могут оказаться внутри блока, где создается одноэлемент, что очень проблематично. Единственная проблема с этим решением - вы платите премию за синхронизацию метода каждый раз, когда вызывается getInstance(). Примера:
public static synchronized Singleton getInstance()
{
// since whole method is synchronized only 1 thread can
// enter the following block ensuring only one instance
// is ever created. however we pay a synchronization
// penalty every time this method is called.
if(mInstance==null) {
mInstance=new Singleton();
}
return mInstance;
}
В качестве альтернативы можно также переключиться использовать нетерпеливую инициализацию одноплодного экземпляра, а не ленивую инициализацию, если инициализация дешево, который гарантирует параллельность, а также не платить синхронизированный штраф за вызов методы деЫпзЬапса(). Пример:
// no synchronization penalty, but penalty for eager init
private static Singleton mInstance = new Singleton();
public static Singleton getInstance()
{
return mInstance;
}
Наиболее эффективный подход заключается в использовании блокировки с двойной проверкой, что вам нужно Java 1.5 или более поздней версии, чтобы надежно использовать в связи с различными реализациями энергозависимой ключевое слово в 1.4 или более старых виртуальных машинах (пожалуйста, обратитесь к разделу " Узоры Head First Design»глава 5 стр.182 опубликована O'Reilly Media, Inc. - это то, где я впервые прочитал об этом) . пример:
private volatile static Singleton mInstance;
private Singleton(){}
public static Singleton getInstance()
{
if(mInstance==null) {
synchronized (Singleton.class) {
// only pay synchronization penalty once
if(mInstance==null){
mInstance=new Singleton();
}
}
}
return mInstance;
}
Этот пример не является формальным Factory Pattern (GoF), но все же полезно, если вы используете его как Static Factory Method
abstract class Product {
}
class ConcreteProduct extends Product{
}
class ProductSupportFactory {
private static ProductSupportFactory instance = null;
private ConcreteProduct product = null;
static {
instance = new ProductSupportFactory();
}
private ProductSupportFactory() {
product = new ConcreteProduct(); //object initialization
}
public static ProductSupportFactory getInstance(){
return instance;
}
public ConcreteProduct getProduct() {
return product;
}
public void setProduct(ConcreteProduct product) {
this.product = product;
}
}
public class ProductConsumer {
public static void main(String args[]){ //client
ConcreteProduct uniqueInstance = ProductSupportFactory.getInstance().getProduct();
ConcreteProduct sharedInstance = ProductSupportFactory.getInstance().getProduct(); //same object hash
}
}
- 1. Java Factory Method/Singleton pattern
- 2. Singleton toolbox vs factory method
- 3. Abstract Factory, Factory Method, Builder
- 4. singleton factory connection pdo
- 5. Создание singleton factory
- 6. Java Abstract Factory - Singleton
- 7. Factory Initializer + Singleton
- 8. Ninject Singleton Factory
- 9. Альтернатива Singleton-Factory
- 10. singleton vs factory?
- 11. Singleton factory, вроде
- 12. Внутренний класс Factory Method
- 13. Factory Method - Неизвестные параметры
- 14. Angularjs .factory method return
- 15. C# generic factory method
- 16. static factory method (Spring)
- 17. «Factory Method» Design Pattern
- 18. code factory method
- 19. Factory Method шаблон осветление
- 20. Вызов Javascript Factory Method
- 21. Abstract Factory vs Factory Method (scope)
- 22. Decorator vs. abstract factory vs. factory method
- 23. Android Singleton Method
- 24. Singleton, Method & Variable
- 25. Entity Framework TPH Factory Method
- 26. Factory Method с ненужными параметрами
- 27. Typhoon Swift Factory Method Missing
- 28. Factory Method шаблон против композиции
- 29. Scala factory method with generics
- 30. Task Factory Method с задержкой
Это не очень ясно. Можете ли вы дать нам пример того, что вы делаете * tyring *? – 2008-12-10 13:23:54
@Bill Я думаю, что он все еще пытается решить http://stackoverflow.com/questions/355899/creating-singleton-factory вопрос, который он задал – 2008-12-10 13:27:37