工厂方法模式(创建型)

来源:互联网 发布:金融行业数据分析师 编辑:程序博客网 时间:2024/06/05 16:07

意图:

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

适用性:

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

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

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


php

<?php//抽象产品类abstract class Product{public abstract function ProductName($name);}//建造者abstract class Creator{public abstract function Factory($productType);}//产品class oneProduct extends Product{public function ProductName($name){return $name;}}//产品class twoProduct extends Product{public function ProductName($name){return $name;}}//产品class firstProduct extends Product{public function ProductName($name){return $name;}}//产品class secondProduct extends Product{public function ProductName($name){return $name;}}//第一个建造工厂class oneFactor extends Creator{public function Factory($productType){switch ($productType){case 'one':return new oneProduct();break;case 'two';return new twoProduct();break;}}}$factor=new oneFactor();$product_obj=$factor->Factory('two');echo $str=$product_obj->ProductName("aaa");$product_obj=$factor->Factory('one');echo $str=$product_obj->ProductName("bbb");




#region 工厂模式

    // 产品    public abstract class Product    {        public string productName;    }    // 建造者    //工厂方法是创建一个框架,让子类决定要如何实现具体的产品    public abstract class Creator    {        public Product FactoryMethod(string f_ProductType)        {            Product _product;            _product=CreateProduct(f_ProductType);        //可对产品做其它的操作......            return _product;        }        //让子类去实现要生产什么产品        public abstract Product CreateProduct(string f_Type);          }    #region  产品    public class OneProduct : Product    {        public OneProduct()        {            productName = "OneProduct";        }    }    public class TwoProduct : Product    {        public TwoProduct()        {            productName = "TwoProduct";        }    }    public class FirstProduct : Product    {        public FirstProduct()        {            productName = "My FirstProduct";        }    }    public class SecondProduct : Product    {        public SecondProduct()        {            productName = "My SecondProduct";        }    }    #endregion    //第一个建造工厂    public class OneCreator : Creator    {        public override Product CreateProduct(string f_Type)        {            switch (f_Type)            {                case "one":                    return new OneProduct();                                    case "two":                    return new TwoProduct();                                }            return null;        }    }    //第二个建造工厂    public class TwoCreator : Creator    {        public override Product CreateProduct(string f_Type)        {            switch (f_Type)            {                case "one":                    return new FirstProduct();                                    case "two":                    return new SecondProduct();                                }            return null;        }    }    #endregion
static void Main(string[] args)        {                       #region 工场模式                                               //第一个工厂 两种产品            Creator _creator = new OneCreator();            Product _product = _creator.FactoryMethod("one");            Console.WriteLine(_product.productName);            _product = _creator.FactoryMethod("two");            Console.WriteLine(_product.productName);            //第二个工厂  造另两种产品            Creator _tCreator = new TwoCreator();            Product _tProduct = _tCreator.FactoryMethod("one");            Console.WriteLine(_tProduct.productName);            _tProduct = _tCreator.FactoryMethod("two");            Console.WriteLine(_tProduct.productName);            #endregion            Console.ReadLine();        }


0 0
原创粉丝点击