第二天 - 工厂方法模式 笔记

两书是否涉及?

大话设计为第8章内容,而在设计模式一书中为3.3内容

书中例子

再现活雷锋
创建迷宫

在简单工厂上的改进:
工厂类:

//使用接口实现抽象工厂
 interface IFactory {
        LeiFeng CreateLeiFeng();
 }
 //具体的工厂
 class UndergraduateFactory : IFactory {
        public LeiFeng CreateLeiFeng() {
            return new Undergraduate();
        }
}
class VolunteerFactory : IFactory {
        public LeiFeng CreateLeiFeng() {
            return new Volunteer();
        }
}

雷锋类:

//父类
 class LeiFeng {
        public void Sweep()
        {
            Console.WriteLine("扫地");
        }
 }
 //派生类
class Undergraduate : LeiFeng{}
class Volunteer : LeiFeng { }

客户端的实现:

 class Program{
        static void Main(string[] args){
            IFactory factory = new UndergraduateFactory();
            LeiFeng student = factory.CreateLeiFeng();
            student.Sweep();
            IFactory factory2 = new VolunteerFactory();
            LeiFeng voluteer = factory2.CreateLeiFeng();
            voluteer.Sweep();
        }
    }

说明:比如要添加白领类,只需要添加白领类和创建它的工厂类就可以,不再需要修改原本工厂类里的方法(等于是把简单工厂类中的switch…case去掉了,在实例化时,通过子类来决定实例化哪一个类),克服了简单工厂违背开放-封闭原则,又保持了封装对象创建过程的优点。
缺点:为了创建一个特定的对象,需要添加两个类

设计模式一书中对工厂方法意图的定义:
定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子类。

以迷宫为例:
抽象工厂可以是Maze类,其中的方法CreateMaze构造一个房屋
需要组合的类有:Door类、Room类和Wall类

扩展一个有炸弹的迷宫:BombedMaze类:Maze类
需要组合的类有:BombedWall类:Wall类、RoomWithABomb类:Room类

扩展一个有秘法的迷宫:EnchantedMaze类:Maze类
需要组合的类有:EnchantedRoom类:Room类、DoorNeedingSpell类:Door类

工厂方法的UML类图

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值