设计模式——创建型模式之 Abstract Factory抽象工厂模式

我们客户程序中最有可能碰到的事情之一就是new一个对象: Road road = new Road();
当客户程序不是很复杂,变化不多的时候是没什么问题的,可是一旦有了变化,很多问题就随之而来了.
Class Customer{
Road road = new Road();
...........
}
现在假设我想将road改成wateroad,试想一下,客户程序中期不是要改很多东西,必须实现封装。一个最简单的封装是:
class RoadFactory{
public static Road CreateRoad(){
return new Roadl;}}

客户程序中:Road road=RoadFactory.createRoad();
这样就实现了最简单的封装,可是这样却不能应对“一系列相互依赖的对象”的创建工作,实际上的抽象工厂如图:

..........这个破csdn,nnd上传个图片都上传不了,搞了n久还是不行
今天心情很烦躁,直接代码示之:

using  System;
using  System.Collections.Generic;
using  System.Text;

namespace  cSharp_AbstractFactory_test
{
    
abstract class Road 
    
{ }
    
abstract class Jungle 
    
{ }
    
abstract class Tunle 
    
{ }

    
abstract class Factory 
    
{
        
public abstract Road createRoad();
        
public abstract Jungle createJungle();
        
public abstract Tunle createTuble();

    }


    
class OldRoad : Road { }
    
class OldJungle : Jungle { }
    
class OldTunle : Tunle { }

    
class ModernRoad : Road { }
    
class ModernJungle : Jungle { }
    
class ModernTunle : Tunle { }

    
class OldFactory : Factory
    
{
        
public override Road createRoad()
        
{
            
return new OldRoad();
        }

        
public override Jungle createJungle()
        
{
            
return new OldJungle();
        }

        
public override Tunle createTuble()
        
{
            
return new OldTunle();
        }

    }


    
class ModernFactory : Factory 
    
{
        
public override Road createRoad()
        
{
            
return new ModernRoad();
        }

        
public override Jungle createJungle()
        
{
            
return new ModernJungle();
        }

        
public override Tunle createTuble()
        
{
            
return new ModernTunle();
        }

    }



    
class GameManager 
    
{
        
private Factory factory;
        Road road;
        Jungle jungle;
        Tunle tunle;
        
public GameManager(Factory factory)
        
{
            
this.factory = factory;
        }

        
public void buildGameFactory
        
{
               road 
= factory.createRoad();
               jungle 
= factory.createJungle();
               tunle 
= factory.createTunle();
        }

        
public void run 
        
{
            
//........
        }

    }


    
class Program
    
{
        
static void Main(string[] args)
        
{
            GameManager g 
= new GameManager(new ModernFactory()); // or OldFactory
            g.buildGameFactory();
            g.run();
            
            
        }

    }

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值