zoukankan      html  css  js  c++  java
  • 设计模式之

    1. 模式意图: 

    定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类。

    2. 别名(Virtual Constructor)

    3. 结构



    4. 工厂方法模式C#实现

    interface Product {
    	public void productMethod();
    }
    
    class ConcreteProduct : Product {
    	public void productMethod() {
    		Console.WriteLine("产品");
    	}
    }
    
    interface Creator {
    	public Product createProduct();
    }
    
    class ConcreteCreator: Creator {
    	public IProduct createProduct() {
    		return new Product();
    	}
    }
    
    public class Client {
    	static void main() {
    		Creator creator = new ConcreteCreator();
    		Product Product = creator.createProduct();
    		prodect.productMethod();
    	}
    }
    


    5. 应用场景

    当一个类不知道它所创建的对象的类的时候。

    当一个类希望由它的子类来制定它所创建的对象的时候。

    当类将创建对象的职责委托给多个帮组子类中的某一个,并且你希望将哪一个帮助类是代理者这一信息局部化的时候。

    创建对象需要大量重复的代码。

    创建对象需要访问某些信息,而这些信息不应该包含在复合类中。

    创建对象的生命周期必须集中管理,以保证在整个程序中具有一致的行为。

    i.e.



    6. 局限性:

    第一个局限是,重构已经存在的类会破坏客户端代码。

    第二个局限是,因为工厂方法所实例化的类具有私有的构造方法,所以这些类就不能扩展了。因为任何子类都必须调用父类的构造方法,但父类的私有构造方法是不能被子类调用的。

    第三个局限是,如果确实扩展了工厂方法所实例化的类(例如将构造方法设为保护的,虽然有风险但也是可行的),子类必须具有所有工厂方法的一套实现。





    References:

    http://zh.wikipedia.org/wiki/%E5%B7%A5%E5%8E%82%E6%96%B9%E6%B3%95

    《大话设计模式》

    google.com

  • 相关阅读:
    通过char与varchar的区别,学习可变长的字符类型
    laravel向视图传递变量
    MySQL数据库几种常用的索引类型使用介绍
    Java小知识点总结01
    好的代码习惯
    刻意练习
    算法
    经常复习
    kibana查询语法 使用教程
    工作思考
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3199129.html
Copyright © 2011-2022 走看看