抽象工厂模式
1.抽象工厂模式:
提供一个接口,让该接口负责创建一系列相关或者相互依赖的对象,无需指定它们具体的类。
2.抽象工厂模式应用场景:
一系列相互依赖的对象的创建工作;同时,由于需求变化,往往存在更多系列的对象的创建工作。
3.举例
例1
AbstractFactory.cs
using System;
using System.Collections.Generic;
using System.Text;
namespace AbstractFactory
{
public interface IFruit
{
}
public class Orange : IFruit
{
public Orange()
{
Console.WriteLine("Orange is got.");
}
}
public class Apple : IFruit
{
public Apple()
{
Console.WriteLine("Apple is got.");
}
}
public class FruitFactory
{
public IFruit MakeFruit(string name)
{
switch (name)
{
case "Orange":
return new Orange();
case "Apple":
return new Apple();
default:
return null;
}
}
}
class Program
{
static void Main(string[] args)
{
string fruitName = Console.ReadLine();
IFruit MyFruit;
FruitFactory MyFruitFactory = new FruitFactory();
MyFruit = MyFruitFactory.MakeFruit(fruitName);
}
}
}
例2
using System;
using System.Collections.Generic;
using System.Text;
namespace AbstractFactory
{
public interface IFruit
{
}
public class Orange : IFruit
{
public Orange()
{
Console.WriteLine("Orange is got.");
}
}
public class Apple : IFruit
{
public Apple()
{
Console.WriteLine("Apple is got.");
}
}
public class FruitFactory
{
public IFruit MakeFruit(string name)
{
switch (name)
{
case "Orange":
return new Orange();
case "Apple":
return new Apple();
default:
return null;
}
}
}
class Program
{
static void Main(string[] args)
{
string fruitName = Console.ReadLine();
IFruit MyFruit;
FruitFactory MyFruitFactory = new FruitFactory();
MyFruit = MyFruitFactory.MakeFruit(fruitName);
}
}
}
AbstractFactory_2.cs
using System;
using System.Collections.Generic;
using System.Text;
namespace AbstractFactory_2
{
//interface
public interface IProduct
{
string Hello();
}
public interface IFruit:IProduct
{
}
public interface ICloth:IProduct
{
}
//class
public class Product : IProduct
{
public string Hello()
{
return "Hello!";
}
}
public class Fruit : IFruit
{
public string Hello()
{
return "You like fruit.Fruit is very delicious.";
}
}
public class Orange : Fruit
{
string price = "Orange price is $1.1";
public Orange()
{
Console.WriteLine(price);
}
}
public class Apple : Fruit
{
string price = "Apple price is $2.1";
public Apple()
{
Console.WriteLine(price);
}
}
public class Cloth : ICloth
{
public string Hello()
{
return "You like cloth.Cloth is very beautiful.";
}
}
public class Shoe : Cloth
{
string price = "Shoe price is $3.1";
public Shoe()
{
Console.WriteLine(price);
}
}
public class Trouse : Cloth
{
string price = "Trouse price is $4.1";
public Trouse()
{
Console.WriteLine(price);
}
}
//AbstractFactory
public class ProductFactory
{
public IProduct MakeProduct(string name)
{
switch (name)
{
case "Orange":
return new Orange();
case "Apple":
return new Apple();
case "Shoe":
return new Shoe();
case "Trouse":
return new Trouse();
default:
return new Product();
}
}
}
class Program
{
static void Main(string[] args)
{
string s = Console.ReadLine();
IProduct myProduct;
ProductFactory myProductFactory = new ProductFactory();
myProduct = myProductFactory.MakeProduct(s);
Console.WriteLine(myProduct.Hello());
Console.ReadLine();
}
}
}
using System;
using System.Collections.Generic;
using System.Text;
namespace AbstractFactory_2
{
//interface
public interface IProduct
{
string Hello();
}
public interface IFruit:IProduct
{
}
public interface ICloth:IProduct
{
}
//class
public class Product : IProduct
{
public string Hello()
{
return "Hello!";
}
}
public class Fruit : IFruit
{
public string Hello()
{
return "You like fruit.Fruit is very delicious.";
}
}
public class Orange : Fruit
{
string price = "Orange price is $1.1";
public Orange()
{
Console.WriteLine(price);
}
}
public class Apple : Fruit
{
string price = "Apple price is $2.1";
public Apple()
{
Console.WriteLine(price);
}
}
public class Cloth : ICloth
{
public string Hello()
{
return "You like cloth.Cloth is very beautiful.";
}
}
public class Shoe : Cloth
{
string price = "Shoe price is $3.1";
public Shoe()
{
Console.WriteLine(price);
}
}
public class Trouse : Cloth
{
string price = "Trouse price is $4.1";
public Trouse()
{
Console.WriteLine(price);
}
}
//AbstractFactory
public class ProductFactory
{
public IProduct MakeProduct(string name)
{
switch (name)
{
case "Orange":
return new Orange();
case "Apple":
return new Apple();
case "Shoe":
return new Shoe();
case "Trouse":
return new Trouse();
default:
return new Product();
}
}
}
class Program
{
static void Main(string[] args)
{
string s = Console.ReadLine();
IProduct myProduct;
ProductFactory myProductFactory = new ProductFactory();
myProduct = myProductFactory.MakeProduct(s);
Console.WriteLine(myProduct.Hello());
Console.ReadLine();
}
}
}