工厂模式
Posted Blogs Wang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了工厂模式相关的知识,希望对你有一定的参考价值。
简单工作模式
面向对象核心思想:封装变化。
个人解释:简单工厂模式,也就是建一个类的工厂类,去生产我们需要的类。
例子:我中午吃饭。我经常吃的有两种麦当劳和沙县。如果没有外卖(工厂类)。那我就要必要,想吃什么跑到那个店里买什么(生产类)。现在有工厂(外卖)类负责生产,我就可以直接在公司买了,然后等着吃。
没有工厂类的时候
class Program { static void Main(string[] args) { //想吃沙县,跑到沙县餐厅去买 Shaxin shaxin=new Shaxin(); Console.WriteLine(shaxin.Buy()); //想吃麦当劳,跑到麦当劳餐厅去买 MacDonald macDonald = new MacDonald(); Console.WriteLine(macDonald.Buy()); Console.ReadLine(); } } /// <summary> /// 沙县餐馆 /// </summary> public class Shaxin { public string Buy(){return "飘香拌面!";} } /// <summary> /// 麦当劳餐厅 /// </summary> public class MacDonald { public string Buy() { return "麦辣鸡腿包套餐!"; } }
下面使用工厂类实现
class Program { static void Main(string[] args) { //使用工厂类,想要什么类直接用工厂生产 //想吃沙县,跑到沙县餐厅去买 Restaurant restaurant = RestaurantSimpleFactory.CreateRestaurant("沙县"); Console.WriteLine(restaurant.Buy()); //想吃麦当劳,跑到麦当劳餐厅去买 restaurant = RestaurantSimpleFactory.CreateRestaurant("麦当劳"); Console.WriteLine(restaurant.Buy()); Console.ReadLine(); } } /// <summary> /// 抽象出餐馆类 /// </summary> public abstract class Restaurant { public abstract string Buy(); } /// <summary> /// 沙县餐馆 /// </summary> public class Shaxin:Restaurant { public override string Buy(){return "飘香拌面!";} } /// <summary> /// 麦当劳餐厅 /// </summary> public class MacDonald:Restaurant { public override string Buy() { return "麦辣鸡腿包套餐!"; } } /// <summary> /// 简单工厂,根据用户选择的餐馆去买饭 /// </summary> public class RestaurantSimpleFactory { public static Restaurant CreateRestaurant(string type) { Restaurant restaurant = null; switch (type) { case "沙县" :restaurant= new Shaxin();break; case "麦当劳": restaurant=new MacDonald();break; } return restaurant; } }
简单工厂的有点和缺点
优点:1.实现了客户和生产的分离。客户不在关心生产。客户只关心消费就可以了。
2.因为客户和生产的分离,客户端消费代码,可以复制满足不同消费者的需求。
缺点:1.要生成的产品必须是有限的,而且明确的。
2.简单工厂实现了,生产者和消费者的分离,单这一切都是有代理类完成的。如果增加新的产品,还需要修改代理类。和增加新的产品类。如果代理类,挂了,整个客户端就不能使用了。
简单工厂模式存在明显的缺点。下面介绍 工厂方法,解决可以简单工厂模式的问题。
工厂方法
以上是关于工厂模式的主要内容,如果未能解决你的问题,请参考以下文章
设计模式简单工厂模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )