工厂方法模式

来源:互联网 发布:java代码表白 编辑:程序博客网 时间:2024/05/22 02:29

工厂方法模式是一种常用的对象创建型设计模式,此模式的核心精神是封装类中不变的部分,提取其中个性化善变的部分为独立类,通过依赖注入以达到解耦、复用和方便后期维护拓展的目的。它的核心结构有四个角色,分别是抽象工厂;具体工厂;抽象产品;具体产品
这里写图片描述


Java

Creator

public interface Creator {     Product getProduct();}

Product

public interface Product {    void Method();}

ConcreteCreator

public class ConcreteCreator implements Creator {       public Product getProduct() {           return new ConcreteProduct();       }}

ConcreteProduct

public class ConcreteProduct implements Product {    public void Method() {        System.out.println("ConcreteProduct Method");    }}

test

public class test {    public static void main (String[] args) {        Creator concreteCreator = new ConcreteCreator();        concreteCreator.getProduct().Method();    }}

C艹

Product

class Product{public: virtual void Method() = 0;};

ConcreteProduct

class ConcreteProduct :public Product{public:    virtual void Method()    {        cout << "ConcreteProduct Method" << endl;    }};

Creator

class Creator{public:public: virtual Product* getProduct() = 0;};

ConcreteCreator

class ConcreteCreator : public Creator{public:    virtual Product* getProduct()    {        return   new ConcreteProduct();    }};

test

int main(int argc, char* argv[]){    Creator* creator = new ConcreteCreator();    Product* Product;    Product = creator->getProduct();    Product->Method();    delete Product;    system("pause");    return 0;}

C井

Creator

 public interface Creator    {        Product getProduct();    }

Product

public interface Product    {        void Method();    }

ConcreteCreator

public class ConcreteCreator : Creator     {        public Product getProduct()         {            return new ConcreteProduct();        }    }

ConcreteProduct

 public class ConcreteProduct : Product    {        public void Method()         {            Console.WriteLine("ConcreteProduct Method");         }    }

test

public class Program    {        public static void Main(string[] args)        {            Creator concreteCreator = new ConcreteCreator();            concreteCreator.getProduct().Method();            Console.ReadLine();        }    }

JS

var Interface = function(name, methods){ if (arguments.length != 2) { throw new Error("Interface constructor called with " + arguments.length + "arguments,but expected exactyl 2.") } this.name = name; this.methods = []; for (var i = 0, len = methods.length; i < len; i++) { if (typeof methods[i] !== "string") { throw new Error("Interface constructor expects methods names to bo " + "passed in asastring."); } this.methods.push(methods[i]); } }Interface.ensureImplements = function(object){ if (arguments.length < 2) { throw new Error("Function Interface.ensureImplements called with " + arguments.length + "arguments,but expected at least 2."); } for (var i = 1, len = arguments.length; i < len; i++) { var inter_face = arguments[i]; if (inter_face.constructor !== Interface) { throw new Error("Function Interface.ensureImplementsexpects arguments " + "two and above to be instances of Interface."); } for (var j = 0, methodsLen = inter_face.methods.length; j < methodsLen; j++) {                    var method = inter_face.methods[j];                    if (!object[method] || typeof object[method] !== 'function') {                            throw new Error("Function Interface.ensureImplements: object " +                            "does not implements the " +                            inter_face.name +                            "interface.Method " +                            method +                            "was not found.");                    }            }    }}var ConcreteProduct = function(){}; ConcreteProduct.prototype = { Method : function(){alert("ConcreteCreator Method");} }var ConcreteCreator = function(){}; ConcreteCreator.prototype = { getProduct : function(){ var concreteProduct = new ConcreteProduct(); Interface.ensureImplements(concreteProduct,Product); return concreteProduct; } }var Creator = new Interface("ConcreteCreator",['getProduct']); var Product = new Interface("ConcreteProduct",['Method']);var obj = new ConcreteCreator();Interface.ensureImplements(obj,Creator); obj.getProduct().Method();

写错了或者写的不好不要打我哟

0 0
原创粉丝点击