工厂方法模式

The Factory Method design pattern defines an interface for creating an object , but let subclasses decide which class to instantiate. This pattern lets a class defer instantiation to subclass.

UML Class Diagram

  Product: This is an interface for creating objects, here, we need to define the operations a product should have.

  ConcreteProduct: This is a class that implements the Product interface.

  Creator: This is an abstract class or interface that declares the facotry method, which returns an object of type product.

  ConcreteCreator: there are the classes that implement the Abstract class or interface and override the factory method to return an instance of the Concrete Product.

Structure Code IN C#

 public interface ICreditCard
    {
        string GetCardType();
        Int32 GetCardLimit();
        Int32 GetAnnualCharge();
    }

    public class MoneyBack : ICreditCard
    {
        public int GetAnnualCharge() => 500;

        public int GetCardLimit() => 10000;

        public string GetCardType() => "MoneyBack";
    }

    public class PlatiumCard : ICreditCard
    {
        public int GetAnnualCharge() => 600;

        public int GetCardLimit() => 20000;

        public string GetCardType() => "Platium";
    }

    public class Titanium : ICreditCard
    {
        public int GetAnnualCharge() => 800;

        public int GetCardLimit() => 50000;

        public string GetCardType() => "Titanium";
    }
Product
 public interface ICreditCardFactory
    {
        ICreditCard CreateCreditCard();
    }

    public class MoneyBackFactory : ICreditCardFactory
    {
        public ICreditCard CreateCreditCard()
        {
            return new MoneyBack();
        }
    }
    public class PlatiumFactory : ICreditCardFactory
    {
        public ICreditCard CreateCreditCard()
        {
            return new PlatiumCard();
        }
    }

    public class TitaniumFactory : ICreditCardFactory
    {
        public ICreditCard CreateCreditCard()
        {
            return new Titanium();
        }
    }
Factory
var titaniumFactory = new TitaniumFactory();
var titanium = titaniumFactory.CreateCreditCard();
Console.WriteLine($"The credit card type: {titanium.GetCardType()}, limit: {titanium.GetCardLimit()}, annual charge: {titanium.GetAnnualCharge()}");
Client

 

工厂方法模式(Factory Method):定义一个用于创建对象的接口,让子类来决定实例化哪一个类。工厂方法使一个类的实例化延迟到其他子类。

与简单工厂的对比:

     简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断,根据客户的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖。

 

     工厂方法实现时,客户端需要决定实例化哪一个工厂来实例化具体的类,选择判断的问题还是存在的,也即是说,工厂方法把简单工厂的内部逻辑判断移到了客户端代码来进行。你想要加功能,本来时改工厂类的,而现在要改客户端。

 

posted @ 2019-05-19 11:01  云霄宇霁  阅读(84)  评论(0编辑  收藏  举报