我正在阅读Joshua Bloch的" Effective Java Programming Language Guide ".
他解释说静态工厂方法可以用来避免不必要的重复对象.
我对此并不十分了解.
谁能解释一下?
为什么要使用工厂在Perl中包装构造函数?一个例子会有所帮助.
问候,论坛.
我正在开发一个使用Twisted来管理网络的Python程序.该程序的基础是一个TCP服务,用于侦听多个端口上的连接.但是,我不是使用一个Twisted工厂来处理每个端口的协议对象,而是尝试为每个端口使用单独的工厂.这样做的原因是强制连接到不同端口的客户端组之间的分离.
不幸的是,似乎这种架构并不完全工作:连接到一个端口的客户似乎所有的工厂(例如,通过各厂所使用的协议类包括"self.factory.clients.append(个体经营)中可用'声明...而不是将给定的客户端仅添加到特定端口的工厂,客户端被添加到所有工厂),每当我在一个端口上关闭服务时,所有端口上的监听器也会停止.
我已经和Twisted合作了一段时间,并且担心我根本不完全理解它的工厂类是如何管理的.
我的问题是:是否根本不可能在不同的端口上使用相同工厂和相同协议的多个同时实例(没有这些实例踩在彼此的脚趾上)?
我已经在SO(和其他地方)上阅读了关于这个主题的一些讨论,但没有能够收集到明确的答案.
我想确保给定的类A只能由特定的类B创建.在C++中,我将构建一个私有的构造函数,并将B指定为朋友.现在只有B才能创造A.
在C#中这样做的惯用方法是什么,如果确实有一个呢?
我想知道是否有更好的方法来实现createEmployee(),它使用字典或其他方式快速查找所请求的类型而不是if-else块.
function Clerk( options ) {
this.hourRate = options.hourRate || 20;
this.firstName = options.firstName || "no first name";
this.lastName = options.lastName || "no last name";
this.id = options.id || "-9999999999";
}
function Manager( options) {
this.hourRate = options.hourRate || 200;
this.firstName = options.firstName || "no first name";
this.lastName = options.lastName || "no last name";
this.id = options.id || "-9999999999";
this.yearBonus = options.yearBonus || "200000";
}
function Teacher( options) {
this.hourRate = options.hourRate || 100;
this.firstName = options.firstName || "no first …Run Code Online (Sandbox Code Playgroud) 我已经使用了一段时间的C++,偶尔会让我感到困惑的一件事是我还没有弄清楚如何在C++中使用这个Delphi Factory构造.
我无法弄清楚的关键部分是如何在C++中传递对类类型的引用.在Delphi中,我们有"TClass"类型.这种类型的变量是对某些类的引用.我们可以使用class of MyClass语法来限制类引用可以引用的类来定义新的类引用类型.
注意术语"Delphi类引用"=/="类的C++实例"
对于那些不熟悉Pascal的人来说,变量是声明的variable: type而不是C风格type variable.同样,函数的返回类型出现在参数列表和名称之后.
我已经在下面的例子中浓缩了语法,以减少它的样板,所以对Delphi开发人员道歉,因为它的格式很糟糕.关键部分在评论中描述.
program demo;
{$APPTYPE CONSOLE}
// declarations
type
Base = class
public constructor Create(name: string); virtual;
end;
// Class reference which refers to Base and its descendants
BaseClass = class of Base;
ChildA = class(Base)
public constructor Create(name: string); override;
end;
ChildB = class(Base)
public constructor Create(name: string); override;
end;
// implementation
constructor Base.Create(name: string);
begin
WriteLn('Base says hi to ' + name); …Run Code Online (Sandbox Code Playgroud) 我对JavaScript中的new关键字感到困惑.以下面的例子为例
function A (value) {
this.a = value;
}
function B (value) {
return new A (value);
}
console.log ( B (0)); // { a: 0 }
console.log (new B (0)); // { a: 0 }
Run Code Online (Sandbox Code Playgroud)
我希望能够创建一个新的"A"实例,而不必使用"new".为此,我有"B()",然而,当我调用"new B()"时,它似乎与"B()"做同样的事情,好像"new"被忽略了.在这两种情况下,instanceof等于"A".到底发生了什么?
单击表单上的"提交"按钮时发生错误.
LoginController和controllerAs在路由配置中定义
Angular版本:AngularJS v1.3.11
dataService.js文件
'use strict';
app.factory('dataService',['$http',DataService]);
function DataService($http) {
var urlBase='http://washerycloud.cloudapp.net/v1/user/';
var service = {};
service.Login =Login;
service.Register= Register;
service.Store = StoreID;
service.Update = Update;
service.Delete = Delete;
return service;
/**Login function*/
function Login(user) {
return $http.get(urlBase + 'login',{params: {name: user.name, password: user.password}}).
then(handleSuccess, handleError('Error login'));
}
/**Register function*/
function Register(user) {
return $http.get(urlBase + 'create',
{params: { name: user.name, surname: user.surname, telephone: user.telephone,
email: user.email, username: user.username, password: user.password }})
.then(handleSuccess, handleError('Error register user'));
}
// private …Run Code Online (Sandbox Code Playgroud) 创建对象的方式和位置应该returnShapeType删除?
这是一个工厂方法演示程序.
请出示代码.
class Shape
{
public:
Shape() {}
virtual void print() {std::cout << "\nFrom shape print";}
};
class Triangle: public Shape
{
public:
Triangle(){}
virtual void print() {std::cout << "\nFrom triangle print";}
};
class Rectangle: public Shape
{
public:
Rectangle(){}
virtual void print() {std::cout << "\nFrom rect print";}
};
class CreateShapeObject
{
public:
CreateShapeObject() {}
Shape *returnShapeType( std::string arg )
{
if (arg == "Triangle")
return new Triangle;
else if (arg == "Rectangle")
return new Rectangle;
} …Run Code Online (Sandbox Code Playgroud) 我希望能够基于枚举类创建对象,并使用字典。像这样:
class IngredientType(Enum):
SPAM = auto() # Some spam
BAKE_BEANS = auto() # Baked beans
EGG = auto() # Fried egg
class Ingredient(object):
pass
class Spam(Ingredient):
pass
class BakedBeans(Ingredient):
pass
class Egg(Ingredient):
pass
class IngredientFactory(object):
"""Factory makes ingredients"""
choice = {
IngredientType.SPAM: IngredientFactory.MakeSpam,
IngredientType.BAKED_BEANS: IngredientFactory.MakeBakedBeans,
IngredientType.EGG: IngredientFactory.MakeEgg
}
@staticmethod
def make(type):
method = choice[type]
return method()
@staticmethod
def makeSpam():
return Spam()
@staticmethod
def makeBakedBeans():
return BakedBeans()
@staticmethod
def makeEgg():
return Egg()
Run Code Online (Sandbox Code Playgroud)
但是我得到了错误:
NameError: name 'IngredientFactory' is not defined
Run Code Online (Sandbox Code Playgroud)
由于某些原因,无法创建字典。我在哪里错了?