zoukankan      html  css  js  c++  java
  • 我也设计模式——1.Factory Method

    工厂方法模式,就是使一个类的实例化延迟到子类——惰性声明
    UML图如下:

        public class Production { }

        
    public abstract class Creator
        
    {
            
    public abstract Production FactoryMathod();
        }


        
    public class ConcreteCreator : Creator
        
    {
            
    public override Production FactoryMathod()
            
    {
                
    return new Production();
            }

        }

    工厂方法模式无处不在,创建型模式都是依赖于工厂模式的。

    简单工厂Simple Factory,这是工厂方法模式的一个特例,因为该模式是通过switch分支(也有用if判断的),来决定最终生成哪一个对象的,而这个switch分支语句,嵌在一个静态方法中,这个改装就是简单工厂。


        public abstract class A
        
    {
            
    public abstract void Do();
        }


        
    public class A1 : A
        
    {
            
    public override void Do()
            
    {
                Console.WriteLine(
    "A1");
            }

        }


        
    public class A2 : A
        
    {
            
    public override void Do()
            
    {
                Console.WriteLine(
    "A2");
            }

        }


        
    public class CreateA
        
    {
            
    public static A CreateAFactory(int type)
            

                
    switch(type)
                
    {
                    
    case 1:
                        
    return new A1();
                        
    break;
                    
    case 2:
                    
    default:
                        
    return new A2();
                        
    break;
                }

            }

        }

    在Client端,只要使用            CreateA.CreateAFactory(1).Do();    就可以生成需要的对象

    简单工厂的缺点是,一旦增加新产品类,同时要实现抽象类中的所有方法;还有,一旦要修改抽象类中的方法,所有子类都要变动——扩展性差,不符合开闭原则。

    另外,简单工厂模式通常使用静态工厂方法,这使得无法由子类继承,造成工厂角色无法形成基于继承的等级结构。

  • 相关阅读:
    CocoaPods使用详细说明
    cocoapod使用
    Android-利用LinearGradient实现文字一闪一闪
    Android5.0 CheckBox颜色修改
    android实现文字渐变效果和歌词进度的效果
    Ceph 常规操作笔记
    Git版本控制器使用总结性梳理
    CentOS 7.5 部署 MySQL 5.7 基于GTID主从复制+并行复制+半同步复制+读写分离(ProxySQL) 环境- 运维笔记 (完整版)
    Ansible-playbook 运维笔记
    Docker容器基础介绍
  • 原文地址:https://www.cnblogs.com/Jax/p/912772.html
Copyright © 2011-2022 走看看