设计模式学习笔记三——Abstract Factory模式

xiaoxiao2026-03-25  2

动机:实现一系列相互依赖对象的创建,通过封装系列对象创建来隔离对象创建和客户程序,从而能够灵活提供更多系列对象创建和系列对象间的切换,而不需要改变客户程序。应用:多种风格软件界面控件的创建、对应多种数据库的多系列数据访问层对象的创建(比如Petshop中的数据访问层对象)。场景:此处以ThinkPad系列产品的组装为例子。组装电脑程序(即客户)需要根据需要拿出不同系列ThinkPad(此处以T43和T60为例)部件(以CPU和主板为例)组装成ThinkPad。因为T43和T60的CPU系列接口不同,所以同一系列中的CPU和主板相互依赖,每次只能拿同一系列的CPU和主板进行组装。Factory Method模式:Factory Method模式是Abstract Factory模式的特殊形式,它实现一个对象的创建,而Abstract Factory模式实现系列对象创建。如这里只涉及到多种CPU的创建,则变为了Factory Method模式。结构代码实现

/**/ /** 产品CPU*/ namespace  DesignPattern.AbstractFactory {    public abstract class CPU    {    }    public class T43CPU : CPU    {    }    public class T60CPU : CPU    {    }}

 

/**/ /** 产品主板*/ namespace  DesignPattern.AbstractFactory {    public abstract class Mainboard    {    }    public class T43Mainboard : Mainboard    {    }    public class T60Mainboard : Mainboard    {    }}

 

/**/ /* * 不同ThinkPad系列相互依赖部件组成不同型号ThinkPad,此处忽略各种不同型号。*/ namespace  DesignPattern.AbstractFactory {    public class ThinkPad    {        public void Play()        {        }    }}

 

/**/ /* * ThinkPad工厂,生产各型号ThinkPad部件*/ namespace  DesignPattern.AbstractFactory {    public abstract class ThinkPadFactory    {        public abstract CPU CreateCPU();        public abstract Mainboard CreateMainboard();    }    public class T43Factory : ThinkPadFactory    {        public override CPU CreateCPU()        {            return new T43CPU();        }        public override Mainboard CreateMainboard()        {            return new T43Mainboard();        }    }    public class T60Factory : ThinkPadFactory    {        public override CPU CreateCPU()        {            return new T60CPU();        }        public override Mainboard CreateMainboard()        {            return new T60Mainboard();        }    }}

 

/**/ /** 客户程序,从ThinkPad工厂中拿出所需系列部件进行组装。*/ namespace  DesignPattern.AbstractFactory {    public class ThinkPadAssembly    {        public static readonly ThinkPadAssembly Instanse = new ThinkPadAssembly();        public ThinkPad CreateThinkPad(string strThinkPadName)        {            ThinkPadFactory thinkPadFactory = (ThinkPadFactory)Assembly.Load("DesignPattern.AbstractFactory").CreateInstance("DesignPattern.AbstractFactory" + "." + strThinkPadName + "Factory");            CPU cpu = thinkPadFactory.CreateCPU();            Mainboard mainboard = thinkPadFactory.CreateMainboard();            return Assemble(cpu, mainboard);        }        private ThinkPad Assemble(CPU cpu, Mainboard mainboard)        {            // 组装并返回ThinkPad,此处简化各种型号的ThinkPad            return new ThinkPad();        }    }} 相关资源:敏捷开发V1.0.pptx
转载请注明原文地址: https://www.6miu.com/read-5046249.html

最新回复(0)