Example #1
0
        /*
         * 桥接模式:将抽象部分与实现部分分离,使它们都可以独立地变化。-《设计模式》Gof
         *
         * 使用频率:★★★☆☆
         *
         * 模式的组成
         *
         * (1)抽象化角色(Abstraction):抽象化给出的定义,并保存一个对实现化对象(Implementor)的引用。
         *      如:[DotNetLanguage]
         *
         * (2)修正抽象化角色(Refined Abstraction):扩展抽象化角色,改变和修正父类对抽象化的定义。
         *      如:[CSharp,FSharp]
         *
         * (3)实现化角色(Implementor):这个角色给出实现化角色的接口,但不给出具体的实现。必须指出的是,这个接口不一定和抽象化角色的接口定义相同,实际上,这两个接口可以非常不一样。实现化角色应当只给出底层操作,而抽象化角色应当只给出基于底层操作的更高一层的操作。
         *      如:[OSPlatformRunTime]
         *
         * (4)具体实现化角色(Concrete Implementor):这个角色给出实现化角色接口的具体实现。
         *      如:[LinuxOSRunTime,WindowsOSRunTime,MacOSRunTime]
         *   
         */
        static void Main(string[] args)
        {
            DotNetLanguage dotNetLanguage = new CSharp();

            Console.WriteLine("=============C#在Linux平台运行===============");
            dotNetLanguage.SetOSPlatform(new LinuxOSRunTime());
            dotNetLanguage.Run();

            Console.WriteLine("=============C#在Windows平台运行===============");
            dotNetLanguage.SetOSPlatform(new WindowsOSRunTime());
            dotNetLanguage.Run();


            DotNetLanguage dotNetLanguage2 = new FSharp();

            Console.WriteLine("=============F#在Mac平台运行===============");
            dotNetLanguage2.SetOSPlatform(new MacOSRunTime());
            dotNetLanguage2.Run();

            Console.ReadKey();

            /*
             * 总结:
             * 1.在桥接模式中,两个类DotNetLanguage和OSPlatformRunTime分别定义了抽象与行为类型的接口,通过调用两接口的子类实现抽象与行为的动态组合。
             *
             *
             * 中心思想:遇见两组或者多组对象的不同实例的组合,通过桥梁可以实现各种动态的组合,这时我们可以使用桥接模式。
             */
        }
Example #2
0
 public static string EscapeFSharpKeyword(string argumentName)
 {
     if (FSharp.Contains(argumentName))
     {
         return($"``{argumentName}``");
     }
     return(argumentName);
 }
        public static string Generate(IEnumerable <TypeMeta> items, bool writable, string targetNamespace, GenerationType gt)
        {
            if (items == null || items.Count() < 1)
            {
                MessageBox.Show("No items imported");
                return(null);
            }
            switch (gt)
            {
            case GenerationType.FSharpRecord:
                return(MapItems(items, x => FSharp.generateRecord(writable, x)));

            case GenerationType.CSharpClass:
                return(MapItems(items, x => CSharp.generateClass(writable, x)));

            case GenerationType.CSharpFile:
                return(MapItems(items, x => CSharp.generateClassFile(targetNamespace, writable, x)));

            default:
                MessageBox.Show("Not implemented");
                return(null);
            }
        }