zoukankan      html  css  js  c++  java
  • 工厂模式

    一:new的问题

    常规对象的创建方法:ClassA a=new ClassA();

    new 的问题:紧耦合,实现依赖,不能应对“具体实例化类型”的变化。比如所有new ClassA的地方全部要换成 ClassB,如果是个大型项目那改动非常大。

    解决思路:那里变化,封装哪里

    二:工厂模式的缘起

    1:变化点在“对象创建”,因此就封装“对象的创建”。

    2:面向接口编程--依赖接口,而非实现。

    3:最简单的解决办法。

    public class RoadFactory
    {
        public static Road CreateRoad()
        {
                return new Road();
        }
      public static Build CreateBuild()
    {return new Build();} }
    //客户调用程序 //Road 对象的创建依赖于RoadFactory,而不是new,如果Road的创建换成 //RoadB只需要在CreateRoad里return RoadB就可以了,只需要更改这一个 //地方。而不用向以前更改所有代码。增加可维护性。 Road a= RoadFactory.CreateRoad();

     上面是一个简单工厂的解决方案,也可以叫静态工厂。但是他只能解决一个系列工厂的创建,不能解决多个系列工厂的创建。这个系列包含普通道路,普通建筑,如果要创建柏油道路和摩天大厦呢?抽象工厂由此产生。

    三:抽象工厂

    1:动机,在软件系统中,经常面临“一系列相互依赖的对象”的创建工作;同时,由于需求的变化,往往存在更多系列对象的创建。

    2:要点,如果没有应对“多系列对象构建”的需求变化,则没有必要使用抽象工厂,这时候使用简单工厂完全可以;“系列对象”指的是这些对象之间有相互依赖,或作用的关系,例如游戏开发中“道路”与“房屋”的依赖,“道路”与“地道”的依赖;ABSTRACT FACTORY模式主要应对“新系列”的需求变动,比如,经常变换的装修风格。其缺点在于难以应对“增加新对象”的需求变动,其系列对象的组成是稳定的,系列对象的组合不经常发生增减;抽象工厂常喝工厂方法模式共同组合来应对“对象创建”的需求变化。

    3:实现

    public interface Road{
    
    }
    public interface Building{
    
    }
    
    public class ModenRoad implements Road{
        
    }
    public class ModenBuilding implements Building{
        
    }
    
    public class ModenFaFactory implements FaFactory{
        public Road createRoad(){
        return new ModenRoad();
        }
    
        public Building createBuilding(){
        return new ModenBuilding();
        }
    }
    public class GameManager{
        private FaFactory faFactory;
        public GameManager(FaFactory faFactory){
        this.faFactory=faFactory;
        }
    
        public void buildGameFa(){
        Road road = faFactory.createRoad();
        Building building = faFactory.createBuilding();
        }
    }

    public interface FaFactory{
        public Road createRoad();
        public Building createBuilding();
    }

    客户端程序

    public class Test{
        public static void main(String args[]){
        FaFactory factory = new ModenFaFactory();
        GameManager gm = new GameManager(factory);
        gm.buildGameFa();
        System.out.println("ss");
        }
    }

    工厂模式分为:简单工厂,工厂方法,抽象工厂。

  • 相关阅读:
    H3 BPM让天下没有难用的流程之技术特性
    H3 BPM让天下没有难用的流程之技术体系
    H3 BPM社区:流程开发者的学习交流平台
    H3 BPM让天下没有难用的流程之功能介绍
    JFlow&CCFlow流程引擎的业务数据与流程数据同步的操作步骤.
    驰骋工作流引擎功能新增操作提示
    回答ccflow工作流程引擎的一个朋友的常见问题
    驰骋表单引擎导入字段的功能使用说明
    什么是ccflow公文流程?如何使用ccflow开发一个公文流程?
    驰骋工作流引擎对一个朋友提问的一些问题的回答.
  • 原文地址:https://www.cnblogs.com/sheseido/p/5292871.html
Copyright © 2011-2022 走看看