美文网首页
{C#}流畅方法.门面

{C#}流畅方法.门面

作者: 码农猫爸 | 来源:发表于2021-08-15 06:11 被阅读0次

背景

  • 可以参考门面设计模式的思路,设计流畅方法

示例

using static System.Console;

namespace FluentFacade
{
    // 数据类
    public class Car
    {
        public string Type { get; set; }
        public string Color { get; set; }
        public int NumberOfDoors { get; set; }
        public string City { get; set; }
        public string Address { get; set; }

        public override string ToString()
            => $"Type: {Type}, Color: {Color}, NumberOfDoors: {NumberOfDoors}, City: {City}, Address: {Address}";
    }

    public class Facade
    {
        protected Car Car = new Car();

        public Facade() { }

        public Car Build() => Car;
        public InfoBuilder Info => new InfoBuilder(Car);
        public AddressBuilder Address => new AddressBuilder(Car);
    }

    // 继承门面类引入其内容,下同
    public class InfoBuilder : Facade
    {
        public InfoBuilder(Car car)
        {
            Car = car;
        }

        // 返回容器类,下同
        public InfoBuilder TypeIs(string type)
        {
            Car.Type = type;
            return this;
        }
        public InfoBuilder ColorIs(string color)
        {
            Car.Color = color;
            return this;
        }

        public InfoBuilder NumberOfDoorsIs(int number)
        {
            Car.NumberOfDoors = number;
            return this;
        }
    }

    public class AddressBuilder : Facade
    {
        public AddressBuilder(Car car)
        {
            Car = car;
        }

        public AddressBuilder CityIs(string city)
        {
            Car.City = city;
            return this;
        }

        public AddressBuilder AddressIs(string address)
        {
            Car.Address = address;
            return this;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            var car = new Facade()
                .Info
                    .TypeIs("BWM")
                    .ColorIs("Red")
                    .NumberOfDoorsIs(5)
                .Address
                    .CityIs("Shanghai")
                    .AddressIs("Yangpu Rd.JY 55")
                .Build();

            WriteLine(car);
            ReadKey();
        }
    }
}

相关文章

  • {C#}流畅方法.门面

    背景 可以参考门面设计模式的思路,设计流畅方法 示例

  • {C#}流畅方法.接口

    背景 使用流畅方法后,能像lambda一样调用,是不是很神奇? 诀窍:返回类型=容器类型 示例

  • {C#}流畅方法.泛型递归

    背景 结合泛型和递归,也能实现流畅方法,但比较烧脑 实现Gx继承Gy或抽象类A(即递归),引入Gy

  • Unity WebGL与jslib相互调用的注意事项

    方法1:将C#方法传给js,js调用方法回调返回的方式 C# 参考链接:WebGL throwing abort(...

  • {C#}设计模式辨析.门面

    背景 复杂系统,可切割成多个相互独立的子系统并由子系统组合而成 与桥接的异同桥接的是维度,每个维度可由子类替换门面...

  • C#匿名函数

    在 2.0 之前的 C# 版本中,声明委托的唯一方式是使用命名方法。 C# 2.0 引入匿名方法,在 C# 3.0...

  • unity3d c#调用java

    c#调用java非静态方法 C#调用静态类,静态方法 ; CustomClass的静态类,SetData是它的静...

  • C# 7.0 的新特性

    Out 变量(Out variables)在之前的 C# 版本中,使用 out 参数并不像我们期盼的那样流畅。在你...

  • C#字符串比较方法

    C#字符串比较方法 用C#比较字符串有多种方法,如: string.Compare(x,y); string.Eq...

  • C# 访问修饰符

    C# 【方法】默认访问级别 : private C# 【类】和【结构体】默认访问级别 : internal 1.命...

网友评论

      本文标题:{C#}流畅方法.门面

      本文链接:https://www.haomeiwen.com/subject/tlbhbltx.html