设计模式——抽象工厂
来源:互联网 发布:js 弹出对话框 编辑:程序博客网 时间:2024/06/16 15:44
抽象工厂关注点是:一个工厂里面可以创建多种类型的实例
比如 既可以创建 Phone 也可以创建Pad
抽象工厂包含多少个职责,分别创建不同类型的实例
抽象工厂和简单工厂的区别在于,工厂可以扩展
抽象工厂适合工厂职责是稳定的情况下
平板基类
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace DesignMode.Interface{ public abstract class BasePad { public abstract void Online(); public abstract void Photo(); }}
iPad类
using DesignMode.Interface;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace AbstractFactory{ public class iPad : BasePad { public override void Online() { Console.WriteLine("use {0} Online", this.GetType().Name); } public override void Photo() { Console.WriteLine("use {0} Photo", this.GetType().Name); } }}
山寨版 iPad类
using DesignMode.Interface;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace AbstractFactory{ public class iPadChina : BasePad { public override void Online() { Console.WriteLine("use {0} Online", this.GetType().Name); } public override void Photo() { Console.WriteLine("use {0} Photo", this.GetType().Name); } }}
手机基类
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace DesignMode.Interface{ public abstract class BasePhone { public abstract void Call(); public abstract void Text(); }}
iPhone 类
using DesignMode.Interface;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace AbstractFactory{ public class iPhone : BasePhone { public iPhone(int price) { } public override void Call() { Console.WriteLine("use {0} call", this.GetType().Name); } public override void Text() { Console.WriteLine("use {0} text", this.GetType().Name); } }}
山寨版 iPhone 类
using DesignMode.Interface;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace AbstractFactory{ public class iPhoneChina : BasePhone { public iPhoneChina(int price) { } public override void Call() { Console.WriteLine("use {0} call", this.GetType().Name); } public override void Text() { Console.WriteLine("use {0} text", this.GetType().Name); } }}
抽象工厂
using DesignMode.Interface;using System;using System.Collections.Generic;using System.Configuration;using System.Linq;using System.Text;using System.Threading.Tasks;namespace AbstractFactory{ /// <summary> /// 约束作用 /// </summary> public abstract class AbstractFactory { /// <summary> /// 创建pad /// </summary> /// <returns></returns> public abstract BasePad CreatePad(); /// <summary> /// 创建Phone /// </summary> /// <returns></returns> public abstract BasePhone CreateiPhone(); //public abstract BaseWatch CreateWatch(); }}
美版工厂
using DesignMode.Interface;using System;using System.Collections.Generic;using System.Configuration;using System.Linq;using System.Text;using System.Threading.Tasks;namespace AbstractFactory{ public class ObjectFactory : AbstractFactory { public override BasePad CreatePad() { return new iPad(); } public override BasePhone CreateiPhone() { return new iPhone(5000); } }}
国版工厂(山寨版工厂)
using DesignMode.Interface;using System;using System.Collections.Generic;using System.Configuration;using System.Linq;using System.Text;using System.Threading.Tasks;namespace AbstractFactory{ public class ObjectFactoryChina : AbstractFactory { public override BasePad CreatePad() { return new iPadChina(); } public override BasePhone CreateiPhone() { return new iPhoneChina(3500); } }}
上端调用
using AbstractFactory;using DesignMode.Interface;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace ConsoleApplication1{ class Program { static void Main(string[] args) { { AbstractFactory.AbstractFactory objectFactory = new ObjectFactory(); BasePhone iphone = objectFactory.CreateiPhone(); BasePad ipad = objectFactory.CreatePad(); } { AbstractFactory.AbstractFactory objectFactory = new ObjectFactoryChina(); BasePhone iphone = objectFactory.CreateiPhone(); BasePad ipad = objectFactory.CreatePad(); } Console.ReadKey(); } }}
0 0
- 设计模式——抽象工厂模式
- 设计模式——抽象工厂模式
- 设计模式——抽象工厂模式
- 设计模式——抽象工厂模式
- 设计模式——抽象工厂模式
- 设计模式——抽象工厂模式
- 设计模式——抽象工厂模式
- 设计模式——抽象工厂模式
- 设计模式——抽象工厂模式
- 设计模式——抽象工厂模式
- 设计模式——抽象工厂模式
- 设计模式——抽象工厂模式
- 设计模式——抽象工厂模式
- 设计模式——抽象工厂模式
- 设计模式——抽象工厂模式
- 设计模式——抽象工厂模式
- 设计模式——抽象工厂模式
- 设计模式——抽象工厂模式
- 4.docker学习笔记:创建自己的registry
- 文件搜索器的实现(二)
- 在linux中添加ftp用户,并设置相应的权限
- WINCE互斥的实现
- scrollTop兼容性处理
- 设计模式——抽象工厂
- 深入理解React中的上下文this
- hdu5411 CRB and Puzzle(矩阵)
- eclispe基础配置
- iOS Core Graphics封装虚线
- hihoCoder1345 小h的朋友们
- iOS开发之NSURLProtocol的那些坑
- 从0开始在腾讯云上部署一个 flask 项目
- 暑期到了--人生规划