房地产市场发展趋势成都百度推广账户优化
news/
2025/9/23 2:35:06/
文章来源:
房地产市场发展趋势,成都百度推广账户优化,网站外链查询,东莞活动网站设计模板介绍#xff1a;在简单工厂模式中#xff0c;我们提到#xff0c;工厂方法模式是简单工厂模式的一个延伸#xff0c;它属于Gof23中设计模式的创建型设计模式。它解决的仍然是软件设计中与创建对象有关的问题。它可以更好的处理客户的需求变化。引入我们继续来说new在简单工厂模式中我们提到工厂方法模式是简单工厂模式的一个延伸它属于Gof23中设计模式的创建型设计模式。它解决的仍然是软件设计中与创建对象有关的问题。它可以更好的处理客户的需求变化。引入我们继续来说new的问题我们在简单工厂模式中将实例化对象的工作推迟到了专门负责创建对象的工厂类中这样在我们事先预知的情况下可以根据我们的需要动态创建产品类。但是我们的预知是有限的客户的变化可能是无限的。所以就出现了问题一旦客户的变化超越了我们的预知我们就必须修改我们的源代码了。这是设计模式所不允许的怎么办呢工厂方法模式正是解决此类问题的。问题具体工厂类的创建工作不能满足我们的要求了创建的工作变化了解决思路哪里变化封装哪里。把具体工厂封装起来。定义工厂方法模式又称为工厂模式也叫虚拟构造器Virtual Constructor模式或者多态工厂模式Polymorphic Factory,在工厂方法模式中父类负责定义创建对象的公共接口而子类则负责生成具体的对象这样做的目的是将类的实例化操作延迟到子类中完成即由子类来决定究竟应该实例化创建哪一个类。意图定义一个用户创建对象的接口让子类决定实例化哪一个类工厂方法模式使一个类的实例化延迟到其子类。参与者 抽象产品角色Product定义产品的接口 具体产品角色ConcreteProduct 实现接口Product的具体产品类 抽象工厂角色Creator 声明工厂方法FactoryMethod返回一个产品 真实的工厂ConcreteCreator实现FactoryMethod工厂方法由客户调用返回一个产品的实例 工厂方法模式UML图现实生活中的例子为了方便大家理解我仍然举穿衣服方面的一个例子。这个例子与简单工厂模式中的那个例子有些不同。据说清朝有个皇帝穿衣非常的奢侈每种衣服具体产品类由一宫女具体工厂类专门负责这样一来每增加一种衣服具体产品类就要多出一个宫女具体工厂类但是他们各负其责互不影响。皇帝之所以这样做是因为针对穿衣服这件事来说可扩展性是非常强的。分析实现的功能可以根据皇帝的要求动态的创建由宫女去拿已存在的具体产品衣服如果皇帝的要求太苛刻这种衣服还没有只需要增加一个宫女一个衣服就能够满足他的要求了。每个宫女只负责一种衣服高内聚要增加一种衣服对于以前的所有宫女与衣服来说都不会受到影响设计模式中所期望的。说到这里是不是明白了工厂方法模式所能解决的问题及其应用了呵呵。。你一定在想比简单工厂模式灵活性高吧。。抽象工厂角色代码 1namespace FactoryMethod2{3 /**//// summary4 /// 抽象工厂类,定义产品的接口5 /// /summary6 public interface IFactory7 {8 ICoat CreateCoat();9 }
10} 抽象产品角色代码 1namespace FactoryMethod 2{ 3 /**//// summary 4 /// 抽象产品类 5 /// /summary 6 public interface ICoat 7 { 8 void ShowCoat(); 9 }10} 具体工厂角色代码 1namespace FactoryMethod 2{ 3 /**//// summary 4 /// 具体工厂类:用于创建商务上衣类 5 /// /summary 6 public class BusinessFactory:IFactory 7 { 8 public ICoat CreateCoat() 9 {10 return new BusinessCoat();11 }12 }1314 /**//// summary15 /// 具体工厂类,用于创建时尚上衣16 /// /summary17 public class FashionFactory : IFactory18 {19 public ICoat CreateCoat()20 {21 return new FashionCoat();22 }23 }24} 具体产品角色代码 1namespace FactoryMethod 2{ 3 /**//// summary 4 /// 具体产品类,商务上衣类 5 /// /summary 6 public class BusinessCoat:ICoat 7 { 8 public void ShowCoat() 9 {10 Console.WriteLine(这件是商务上衣);11 }12 }1314 /**//// summary15 /// 具体产品类,时尚上衣类16 /// /summary17 public class FashionCoat : ICoat18 {19 public void ShowCoat()20 {21 Console.WriteLine(这件是时尚上衣);22 }23 }24}25 客户端代码 1namespace FactoryMethod 2{ 3 /**//// summary 4 /// 客户端代码 5 /// /summary 6 class Client 7 { 8 static void Main(string[] args) 9 {10 //为了方便以后修改,将工厂类的类名写在应用程序配置文件中11 string factoryName ConfigurationManager.AppSettings[FactoryName];12 13 IFactory factory (IFactory)Assembly.Load(ConcreteFactory).CreateInstance(FactoryMethod. factoryName);14 15 ICoat coat factory.CreateCoat();16 //显示你要的上衣17 coat.ShowCoat();18 }19 }20} 客户端代码需要注意的两个地方1把具体工厂类类名称写在了应用程序配置文件中方便修改2用到了反射利用.NET提供的反射可以根据类名来创建它的实例非常方便由反射想到的下面这一段内容不是计划要写的。如果在具体工厂中每次new的对象都是一个而且这些类是继承自抽象产品接口的那么我们用简单工厂模式也可以实现动态的增加具体产品类。这样来做在简单工厂模式中最核心的部分----工厂类不要根据传来的条件去动态创建产品类利用反射机制去创建。把要实例化的类名放在应用程序配置文件中呵呵。。这样利用.NET特有的反射就可以用简单工厂模式解决更多的问题了工厂方法模式的一部分问题也是可以通过“这样的简单工厂模式”解决的在需要增加具体产品类时不用增加具体工厂是不是简单一些呀。下去试一下。。。优点 基于工厂角色和产品角色的多态性设计是工厂方法模式的关键。它能够使工厂可以自主确定创建何种产品对象。而且如何创建一个具体产品的细节完全封装在具体工厂内部符合高内聚低耦合。 在系统中加入新产品时无需修改抽象工厂和抽象产品提供的接口无需修改客户端也无需修改其他的具体工厂和具体产品很好的利用了封装和委托。 缺点 在添加新产品时需要编写新的具体产品类其实这不算一个缺点因为这是不可避免的要增加与之对应的具体工厂类。 应用情景 类不知道自己要创建哪一个对象时 类用它的子类来指定创建哪个对象 当类将创建对象的职责委托给多个帮助子类中的某一个并且你希望将哪一个帮助子类是代理者这一信息局部化的时候 工厂方法模式在ASP.NET HTTP通道中的应用TerryLee在他的那篇文件中写的非常好推荐去看一下。 转载于:https://www.cnblogs.com/Loyalty/archive/2012/04/24/2469050.html
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/911130.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!