我有一个工厂.我不想允许这个工厂生产的类在工厂外实例化.如果我将它们变成抽象的,静态的,或者给它们私有构造函数,那么它们根本就不可实例化!这是语言限制还是什么?
我不想允许这个
var awcrap = new Extrude2013 (); // BAD !!!
awcrap.extrudify (); // I don't want to allow this
Run Code Online (Sandbox Code Playgroud)
其余代码:
using System;
namespace testie
{
public enum ExtrudeType { Extrude2013, Extrude2014 }
public interface IExtrudeStuff {
void extrudify();
}
public class Extrude2013 : IExtrudeStuff {
public void extrudify(){
Console.WriteLine ("extrudify 2013");
}
}
public class Extrude2014 : IExtrudeStuff {
public void extrudify(){
Console.WriteLine ("extrudify 2014");
}
}
public static class ExtrudeFactory {
public static IExtrudeStuff Create(ExtrudeType t) {
switch …Run Code Online (Sandbox Code Playgroud) 如何确保某个类仅由工厂实例化而不是直接调用new?
编辑:我需要工厂是一个单独的类(为了依赖注入目的)所以我不能使它成为实例化类的静态方法,所以我不能使新的私有.
假设我有一个知道如何制作Square的Factory类.如果我觉得只有Factory类知道如何制作一个正方形并且我想阻止其他人(即使在同一个程序集中)创建一个正确的(如果有这样的东西)那么方法呢?