美文网首页
工厂方法模式

工厂方法模式

作者: 一毛钱 | 来源:发表于2019-03-31 23:10 被阅读0次

    工厂方法模式(定义)

    定义一个用于创建对象的统一的接口,然后由子类实现。

    工厂方法模式->角色划分

    角色一:抽象产品
    角色二:具体产品
    角色三:抽象工厂
    角色四:具体工厂

    工厂方法模式->原理案例

    工厂创建电脑->富士康工厂
    华为工厂、三星工厂、苹果工厂、联想工厂…
    如何知道你制造出来的产品是电脑?
    因为:电脑标准规范(协议、接口)->特点
    角色一:抽象产品->定义产品规范(规格)->电脑规范
    角色二:具体产品->具体实现(具体制造目标)->具体电脑 具体电脑:华为电脑、三星电脑、苹果电脑…
    角色三:抽象工厂->定义工厂规范和标准
    角色四:具体工厂->华为工厂、三星工厂

    角色一:抽象产品->ComputerProtocol
    角色二:具体产品->SXComputer、HWComputer、MacComputer…
    角色三:抽象工厂->ComputerFactoryProtocol
    角色四:具体工厂->SXComputerFactory、HWComputerFactory…

    示例程序

    角色一:抽象工厂 
    //电脑工厂标准
    //程序中->引用关系
    //判断的依据
    @protocol ComputerFactoryProtocol<NSObject>
    
    //流水线
    -(id<ComputerProtocol>)getComputer;
    
    @end
    
    //角色三:抽象产品  电脑规范
    @protocol ComputerProtocol<NSObject>
    
    //处理器
    -(void)cpu;
    
    //显卡
    -(void)displaycard;
    
    //主板
    -(void)mainborad;
    
    @end
    
    //角色二:  具体工厂 
    @interface SXComputerFactory : NSObject<ComputerFactoryProtocol>
    
    @end
    
    @implementation SXComputerFactory
    
    -(id<ComputerProtocol>)getComputer{
        return [[SXComputer alloc] init];
    }
    
    @end
    
    @interface HWComputerFactory : NSObject<ComputerFactoryProtocol>
    
    @end
    
    
    @implementation HWComputerFactory
    
    -(id<ComputerProtocol>)getComputer{
        return [[HWComputer alloc] init];
    }
    
    @end
    
    
    //角色四: 具体产品
    @interface SXComputer : NSObject<ComputerProtocol>
    
    @end
    
    @implementation SXComputer
    
    //处理器
    -(void)cpu{
        NSLog(@"三星处理器");
    }
    
    //显卡
    -(void)displaycard{
        NSLog(@"三星显卡");
    }
    
    //主板
    -(void)mainborad{
        NSLog(@"三星主板");
    }
    
    @end
    
    
    @interface HWComputer : NSObject<ComputerProtocol>
    
    @end
    
    @implementation HWComputer
    
    //处理器
    -(void)cpu{
        NSLog(@"华为处理器");
    }
    
    //显卡
    -(void)displaycard{
        NSLog(@"华为显卡");
    }
    
    //主板
    -(void)mainborad{
        NSLog(@"华为主板");
    }
    
    @end
    

    相关文章

      网友评论

          本文标题:工厂方法模式

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