当前位置: 首页 > news >正文

什么是网页?/青山seo排名公司

什么是网页?,青山seo排名公司,宝安区住房和建设局网站,太原网站开发定制工厂方法【Factory Method】模式个人领悟前言:最近在学习C#设计模式,学习资料主要是:《C#设计模式》一书,李建中老师的 【C#面向对象设计模式纵横谈\C#面向对象设计模式纵横谈(3):Abstract Fact…

                                      工厂方法【Factory Method】模式个人领悟
前言:最近在学习C#设计模式,学习资料主要是:《C#设计模式》一书,李建中老师的 【C#面向对象设计模式纵横谈\C#面向对象设计模式纵横谈(3):Abstract Factory 抽象工厂模式(创建型模式)】讲座,
吕震宇老师的C#设计模式(5)-Factory Method Pattern。我想从一个初学者的角度来讲解下自己的体会。

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

客户程序:
  1:对客户程序的理解和重视是很重要,我在刚开始学习的时候理解得很狭隘,以为客户程序是在三层结构中表示层使用,其实这里客户程序与三层结构中任何一层都没有必然的联系。往往客户程序供表示层使用。
  2:李建中老师讲:设计模式的最要重的思想是:封装变化点--哪里变化,封装哪里。
个人理解是:在自己的项目中应用设计模式时,需要明白哪里地方是相对稳定,哪里地方是变化的,对于变化部分,将其封装起来。在工厂方法模式中,客户程序应该是相对稳定,客户程序无论怎么写,都不依赖于具体实现,依赖于抽象类或接口。

例子:有一个网站用来发布招商项目,对于项目信息,有三种人对其操作,普通浏览者,发布项目信息的会员,网站管理员。

//项目操作抽象类
using System;
namespace ImportFund
{
 public abstract class Operator
 {
  
 }
}

//普通浏览者操作
namespace ImportFund
{
 public class BrowserOperator: Operator
 {  
    //主要操作有搜索单条项目信息。
    public Project Select(Int32 id)
    {
  .......
    }
   
    //搜索多项信息
    public IList SelectList(Int32 id)
    {
  .......
    }
 }
}

//发布项目的会员,继承普通浏览者操作,
namespace ImportFund
{
 public class MemberOperator: BrowserOperator
 {
   // 会员拥有修改项目的功能。
   public void update()
   {
  .....  
   }
 }
}

//管理员操作。
namespace ImportFund
{
 public class AdministratorOperator: MemberOperator
 {

 }
}

//抽象工常类
namespace ImportFund
{
 public abstract class OperatorFactory
 {
  public abstract Operator CreateOperator();
 }
}

//具体工厂类:普通浏览者操作工厂。//对应定义:让子类决定实例化哪一个类
namespace ImportFund
{
 public class BrowserOperatorFactoy: OperatorFactory
 {
  public override Operator CreateOperator()
  {
   return new BrowserOperator();
  }
 }
}

//具体工厂类:发布项目的会员操作工厂。// 对应定义:让子类决定实例化哪一个类
namespace ImportFund
{
 public class MemberOperatorFactory: OperatorFactory
 {
  public override Operator CreateOperator()
  {
   return new MemberOperator();
  }
 }
}

//具体工厂类:管理员操作工厂。 //对应定义:让子类决定实例化哪一个类
namespace ImportFund
{
 public class AdministratorOperatorFactory: OperatorFactory
 {
  public override Operator CreateOperator()
  {
   return new AdministratorOperator();
  }
 }
}

//客户程序
namespace ImportFund
{
 public class OperatorManager
 {
  private Operator _operator;

  private OperatorManager(OperatorFactory operatorFactory)
  {
   this._operator = operatorFactory.CreateOperator();
  }

  public Operator GetOperator
  {
   get
   {
    return this._operator;
   }
  }
 }
}

客户是相对稳定的,无论怎么写,都不依赖于具体实现,依赖于抽象类或接口。在上面的客户程序中,
用到的是:抽象的操作类Operator, 抽象的工厂类【参数】:OperatorFactory。

//调用客户程序
namespace ImportFund
{
   public class App
   {
 new OperatorManager(???????).GetOperator;
   }
}

在???????这里,根据自己的需要来放入不同的工厂类。不变化的是客户程序中的逻辑以及客户程序中依赖的抽象类或接口。
在以后如果一个超级管理员时,上面的代码都不变化,变化的是:添加一个超级管理员操作工厂类,超级管理员操作类。

以上纯属于个人理解。请各位高手指点。。。

转载于:https://www.cnblogs.com/chenjie0512/archive/2005/12/26/305050.html

http://www.lbrq.cn/news/1333243.html

相关文章:

  • 烟台网站推广排名/网络推广需要什么
  • 网站开发部门工资入什么科目/建立网站流程
  • 个人网站备案内容不合格/网站运营主要做什么工作
  • 购买网站服务如何做支出/cms
  • 网站开发与维护价格/快速优化网站排名的方法
  • 一品威客网兼职/怎么seo网站排名
  • 京东电子商务网站建设/网站的网络推广
  • 建设网站哪好/关键词歌词打印
  • 怎样制作一个个人网站/直接打开百度
  • 国外优秀的平面设计网站/如何推广微信公众号
  • 连云港市海州区建设局网站/网络推广的工作内容是什么
  • 广西来宾博彩网站建设/在线搭建网站
  • wordpress有点尴尬诶该页无法显示/搜索引擎优化的主题
  • 内蒙古做网站的公司/微信朋友圈广告投放价格表
  • 重庆网站制作的网站/如何优化网络
  • 做美食的网站可以放些小图片/百度收录查询方法
  • 网站审核照片幕布/seo文章关键词怎么优化
  • 东莞短视频seo制作/seo合作代理
  • 湖南建设资质申请网站/深圳外贸seo
  • app制作平台大全/湖南优化公司
  • 电脑网站首页设计/站长统计是什么意思
  • 做网站的主题/西安seo引擎搜索优化
  • 深圳市年检在哪个网站做/seo综合查询站长工具关键词
  • 郑州做网站设计的公司/渠道营销推广方案
  • 2017做网站挣钱吗/外链生成网站
  • app备案查询网站/315影视行业
  • 做网站费用会计分录/广告传媒公司经营范围
  • 公司网站建设深/微信软文案例
  • 用web做简单的电商网站/web网站模板
  • iis如何建立网站/湖南企业竞价优化公司
  • 解释 Spring MVC 的工作原理
  • TF-IDF——红楼梦案例
  • 数据结构 二叉树(2)堆
  • react+vite来优化下每次使用hook函数都要引入的情况
  • Note4:Self-Attention
  • 深入解析Linux poll()系统调用