工厂方法模式
来源:互联网 发布: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
- 工厂模式 -- 工厂方法
- 工厂模式-工厂方法
- 工厂模式-工厂方法
- 工厂 > 工厂方法模式
- 工厂模式-工厂方法模式
- 工厂模式-工厂方法模式
- 工厂模式---工厂方法模式
- 【模式】工厂方法模式
- 工厂方法,抽象工厂模式
- C#工厂模式-工厂方法
- 工厂模式 和工厂方法
- 工厂模式-C-工厂方法
- 工厂模式以及工厂方法
- 简单工厂、工厂方法、抽象工厂模式
- 简单工厂、工厂方法、抽象工厂模式
- 工厂模式(简单工厂、工厂方法)
- 简单工厂|工厂方法|抽象工厂模式
- 设计模式-工厂模式(简单工厂模式+工厂方法模式)
- MyBatis和Hibernate的比较
- Android 多线程-----AsyncTask详解
- HTML5 weui笔记
- Python 字符串格式化
- Java中日期类,日历类的使用
- 工厂方法模式
- 实现登录界面的“记住我”功能 JAVA
- textView实现placehodle
- STL vector用法
- 关于Redis数据过期策略
- Android依赖注入:Dagger、RoboGuice和ButterKnife比较
- 友盟页面爬虫工具
- Til the Cows Come Home (POJ 1860)
- Collect More Jewels