Abstract Factory 为创建一族相互关联或者相互依赖的对象提供支持

本文通过C#代码示例介绍了抽象工厂模式的应用。该模式提供了一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。示例中定义了抽象的GirlFactory类和两个具体实现:PrettyGirlFactory与UglilyGirlFactory,展示了如何根据不同条件选择实例化工厂。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ContractedBlock.gifExpandedBlockStart.gifGirlFactory
1None.gifusing System;
2None.gif
3None.gifnamespace Gof.Test.AbstractFactory
4ExpandedBlockStart.gifContractedBlock.gifdot.gif{
5InBlock.gif    public abstract class GirlFactory 
6ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif
7InBlock.gif        abstract public Girl Make();
8ExpandedSubBlockEnd.gif    }

9ExpandedBlockEnd.gif}
ContractedBlock.gifExpandedBlockStart.gifPrettyGirlFactory
 1None.gifusing System;
 2None.gif
 3None.gifnamespace Gof.Test.AbstractFactory
 4ExpandedBlockStart.gifContractedBlock.gifdot.gif{
 5InBlock.gif    public class PrettyGirlFactory :  GirlFactory 
 6ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif{
 7InBlock.gif    
 8ExpandedSubBlockStart.gifContractedSubBlock.gif        override public Girl Make() dot.gif{return new ChinessGirl(); }
 9InBlock.gif
10ExpandedSubBlockEnd.gif    }

11ExpandedBlockEnd.gif}
ContractedBlock.gifExpandedBlockStart.gif
 1None.gifusing System;
 2None.gif
 3None.gifnamespace Gof.Test.AbstractFactory
 4ExpandedBlockStart.gifContractedBlock.gifdot.gif{
 5InBlock.gif    public class UglilyGirlFactory :GirlFactory 
 6ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif{
 7InBlock.gif    
 8ExpandedSubBlockStart.gifContractedSubBlock.gif        override public    Girl Make() dot.gifreturn new JappnessGirl(); }
 9ExpandedSubBlockEnd.gif    }

10ExpandedBlockEnd.gif}
ContractedBlock.gifExpandedBlockStart.gifGirl
1None.gifusing System;
2None.gif
3None.gifnamespace Gof.Test.AbstractFactory
4ExpandedBlockStart.gifContractedBlock.gifdot.gif{
5InBlock.gif    public abstract class Girl 
6ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif
7InBlock.gif        abstract public void GetName();
8ExpandedSubBlockEnd.gif    }

9ExpandedBlockEnd.gif}
ContractedBlock.gifExpandedBlockStart.gifChinessGirl
 1None.gifusing System;
 2None.gif
 3None.gifnamespace Gof.Test.AbstractFactory
 4ExpandedBlockStart.gifContractedBlock.gifdot.gif{
 5InBlock.gif    public class ChinessGirl : Girl 
 6ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif{
 7ExpandedSubBlockStart.gifContractedSubBlock.gif        override public void GetName() dot.gif{ Console.WriteLine("ChinaGirl");}
 8ExpandedSubBlockEnd.gif    }

 9ExpandedBlockEnd.gif}

10None.gif
ContractedBlock.gifExpandedBlockStart.gifJappnessGirl
 1None.gifusing System;
 2None.gif
 3None.gifnamespace Gof.Test.AbstractFactory
 4ExpandedBlockStart.gifContractedBlock.gifdot.gif{
 5InBlock.gif    public class JappnessGirl : Girl 
 6ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif{
 7ExpandedSubBlockStart.gifContractedSubBlock.gif        override public void GetName() dot.gif{ Console.WriteLine("JappnessGirl"); }
 8ExpandedSubBlockEnd.gif    }

 9ExpandedBlockEnd.gif}

10None.gif
ContractedBlock.gifExpandedBlockStart.gifSimilarGirl
 1None.gifusing System;
 2None.gif
 3None.gifnamespace Gof.Test.AbstractFactory
 4ExpandedBlockStart.gifContractedBlock.gifdot.gif{
 5InBlock.gif    class SimilarGirl 
 6ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif{
 7InBlock.gif        private Girl girl;
 8InBlock.gif        public SimilarGirl( GirlFactory factory )
 9ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
10InBlock.gif            // create window, attach Links
11InBlock.gif            girl = factory.Make();
12ExpandedSubBlockEnd.gif        }

13InBlock.gif        public void GetName()
14ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
15InBlock.gif            girl.GetName(); 
16ExpandedSubBlockEnd.gif        }
    
17InBlock.gif    
18ExpandedSubBlockEnd.gif    }

19ExpandedBlockEnd.gif}

20None.gif
ContractedBlock.gifExpandedBlockStart.gif客户代码
 1None.gif#if UNIX
 2None.gif            Gof.Test.AbstractFactory.GirlFactory factory = new Gof.Test.AbstractFactory.UglilyGirlFactory();
 3None.gif#else 
 4None.gif            Gof.Test.AbstractFactory.GirlFactory factory = new Gof.Test.AbstractFactory.PrettyGirlFactory();
 5None.gif#endif
 6None.gif            Gof.Test.AbstractFactory.Girl g =     factory.Make();
 7None.gif            g.GetName();
 8None.gif            Gof.Test.AbstractFactory.SimilarGirl s = new Gof.Test.AbstractFactory.SimilarGirl(factory);
 9None.gif            s.GetName();
10None.gif            Console.ReadLine();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值