博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式学习之路-抽象工厂模式
阅读量:4165 次
发布时间:2019-05-26

本文共 3170 字,大约阅读时间需要 10 分钟。

之前学过了简单工厂模式,工厂方法模式,简单工厂在创建的时候,需要传入一个识别符,然后返回相应的实例。而工厂方法在需要的时候,创建相应的工厂类,获得相应的实例。

抽象工厂模式(Abstract Factory):提供一个创建一系列相关或互相依赖的接口,而无需指定它们具体的类。

看看UML类图

基本代码

///     /// 抽象产品A    ///     public abstract class Car    {        public abstract void Run();    }
///     /// 抽象产品B    ///     public interface IBus    {        void Run();    }
///     /// 实体产品A1    ///    public class BMWCar:Car    {        public override void Run()        {            Console.WriteLine("宝马轿车在行驶!");        }    }
///     /// 实体产品A2    ///     public class BenzCar:Car    {        public override void Run()        {            Console.WriteLine("奔驰轿车在行驶!");        }    }
///     /// 实体产品B1    ///     public class BMWBus : IBus    {        public void Run()        {            Console.WriteLine("宝马大汽车");        }    }
///     /// 实体产品B2    ///     public class BenzBus : IBus    {        public void Run()        {            Console.WriteLine("奔驰大汽车");        }    }
///     /// 抽象工厂    ///     public abstract class AbstractFactory    {        public static AbstractFactory CreateFactory(string strType)        {            AbstractFactory factory = null;            switch (strType)            {                case "BMW":                    factory = new BMWFactory();                    break;                case "Benz":                    factory = new BenzFactory();                    break;            }            return factory;        }        ///         /// 抽象方法 创建Car对象        ///         /// 
public abstract Car CreateCar(); /// /// 创建BUS /// ///
public abstract IBus CreateBus(); }
///     /// 实体工厂1    ///    public class BMWFactory:AbstractFactory    {        public override Car CreateCar()        {            return new BMWCar();        }        public override IBus CreateBus()        {            return new BMWBus();        }    }
///     /// 实体工厂2    ///     public class BenzFactory : AbstractFactory    {        public override Car CreateCar()        {            return new BenzCar();        }        public override IBus CreateBus()        {            return new BenzBus();        }    }
客户端

package com.abings.abstractfactory;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import com.abings.abstractfactory.AbstractFactory.Bus;import com.abings.abstractfactory.AbstractFactory.Car;import com.abings.abstractfactory.AbstractFactory.IFactory;public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //宝马工厂        IFactory iFactory = IFactory.createFactory("Bwm");        //奔驰工厂        IFactory iFactory1 = IFactory.createFactory("Benz");        //宝马系列的公交和汽车        Bus bus = iFactory.createBus();        Car car = iFactory.createCar();        //出厂测试        bus.run();        car.run();        //奔驰系列        Bus bus1 = iFactory1.createBus();        Car car1 = iFactory1.createCar();        //出厂测试        car1.run();        bus1.run();    }}
使用过程我们发现,其实ProduxtA1和ProductB1是一个系列。需要用一个工厂来统一它们的实例。所有工厂类这边有个对应的工厂生产类。

代码git:

你可能感兴趣的文章
PHP中ob_start()函数的用法
查看>>
最优化原理与无后效性
查看>>
KMP算法详解
查看>>
Web技术四层结构
查看>>
简单叙述一下MYSQL的优化
查看>>
Clustered Index & Non Clustered Index
查看>>
为数据库建立索引
查看>>
对Session和Cookie的区分与理解
查看>>
HTTP协议中POST、GET、HEAD的区别是什么?分别在什么情况下使用?(
查看>>
表单中post与get的区别
查看>>
PHP文件上传
查看>>
半小时精通正则表达式
查看>>
HTTP协议中请求方法Get和Post的区别是什么?
查看>>
Nutch搜索引擎分析
查看>>
map-reduce简介
查看>>
!!!!搜索引擎设计实用教程-以百度为例
查看>>
搜索引擎工作原理(Nutch)
查看>>
七、 基于Nutch主题搜索引擎方案设计
查看>>
垂直搜索引擎 nutch
查看>>
同一进程中的线程究竟共享哪些资源
查看>>