23种设计模式-Abstract Factory(抽象工厂)设计模式
来源:互联网 发布:vmware ubuntu 安装 编辑:程序博客网 时间:2024/05/29 15:04
解决"系列对象"的需求变化
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;//依赖于抽象namespace _抽象工厂设计模式{ // 注意:设计一个程序需要仔细观察变化的轴线在哪里,然后进行进一步封装. /*1.如果没有应对"多系列对象构建"的需求变化,那就没有必要使用 Abstract Factory模式,这时候使用简单的静态工厂完全可以. 2."系列对象"指的是这些对象之间有相互依赖,或者作用的关系,例如游戏开发 场景中的"道路"与"房屋"的依赖. 3.Abstract Factory模式主要应对与"新系列"的需求变动,其缺点在于难与应对 "新对象"的需求变动,比如下面程序,我现在要添加一种"地道"对象,修改起来 会非常麻烦!所以在设计之前一定要观察,它变化的轴线在哪里,这很重要.. 4.Abstract Factory模式经常和Factory Method模式共同组合来应对"对象创建" 的需求变化. */ //==================抽象=============================== //道路 public abstract class Road { //可以写一些抽象方法 public abstract void LeiXing(); } //房屋 public abstract class Building { //可以写一些抽象方法 public abstract void LeiXing(); } //抽象工厂 public abstract class FacilitiesFactory { public abstract Road CreateRoad(); public abstract Building CreateBuilding(); } //======================================================= //=================具体实现============================== //实现1---------------------------------------- public class XianDaiRoad:Road{ public override void LeiXing() { Console.WriteLine("现代街道"); } } public class XianDaiBuilding : Building { public override void LeiXing() { Console.WriteLine("现代房屋"); } } //--------------------------------------------------------实现1结尾 //实现2---------------------------------------- public class GuDianRoad : Road { public override void LeiXing() { Console.WriteLine("古典街道"); } } public class GuDianBuilding : Building { public override void LeiXing() { Console.WriteLine("古典房屋"); } } //--------------------------------------------------------实现2结尾 //实现3---------------------------------------- public class ZhanZhengRoad : Road { public override void LeiXing() { Console.WriteLine("战争街道"); } } public class ZhanZhengBuilding : Building { public override void LeiXing() { Console.WriteLine("战争房屋"); } } //--------------------------------------------------------实现3结尾 //具体工厂--------------------------------- public class GongChang: FacilitiesFactory { public override Road CreateRoad() { //修改的时候只需要修改这里就可以了, //return啥就是啥类型的街道/ return new ZhanZhengRoad(); } public override Building CreateBuilding() { //return啥就是啥类型的房屋 return new ZhanZhengBuilding(); } } //------------------------------------------------------------- //客户类---相对就稳定了,无论前面怎么修改这里都不太会有影响 class GameManager { FacilitiesFactory facilities; Road road; Building building; public GameManager(FacilitiesFactory _facilities) { this.facilities = _facilities; } //这里根本不需要变动,在编程中这里如果有变动的话会很麻烦 public void BuildGameFacilities() { road = facilities.CreateRoad(); building = facilities.CreateBuilding(); } //执行,实例后的方法 public void Run() { road.LeiXing(); building.LeiXing(); } } class Program { static void Main(string[] args) { GongChang gc = new GongChang(); GameManager g = new GameManager(gc); g.BuildGameFacilities(); g.Run(); Console.ReadKey(); } }}
1 0
- 23种设计模式-Abstract Factory(抽象工厂)设计模式
- 设计模式-抽象工厂模式(Abstract Factory)
- 设计模式:抽象工厂模式(Abstract Factory)
- 23种设计模式之抽象工厂(Abstract Factory)
- 设计模式(2)- 抽象工厂(Abstract Factory)
- Abstract Factory 抽象工厂设计模式
- Abstract Factory 抽象工厂设计模式
- 抽象工厂(Abstract Factory)设计模式
- 设计模式学习-抽象工厂(Abstract Factory)
- 设计模式-抽象工厂(Abstract Factory)
- 设计模式之一:Abstract Factory 抽象工厂
- 【设计模式】之 Abstract Factory 抽象工厂
- 抽象工厂(Abstract Factory)设计模式
- 设计模式之:抽象工厂(Abstract Factory)
- 深入浅出设计模式 ------ Abstract Factory(抽象工厂)
- Abstract Factory 抽象工厂设计模式
- 设计模式-抽象工厂(Abstract Factory)
- 设计模式:抽象工厂-abstract factory
- Linux shell脚本的建立与执行
- 2017.3.25 最长递增子序列 失败总结
- es6 let和const
- hdu 4638 离线+树状数组
- Eclipse的Servers视图中无法添加Tomcat6/Tomcat7
- 23种设计模式-Abstract Factory(抽象工厂)设计模式
- Java常见面试题及答案 21-30(集合类)
- Raspberry Pi 树莓派连接温度传感器DS18B20
- 0005_Longest Palindromic Substring
- Qt精彩实例3
- JS之document
- 内存分配机制
- shiro与app利用token进行交互的解决方案
- 算法导论 练习题 4.4-5