• 设计模式——抽象工厂模式及java实现


    设计模式——抽象工厂模式及java实现

    设计模式在大型软件工程中很重要,软件工程中采用了优秀的设计模式有利于代码维护,方便日后更改和添加功能。
    设计模式有很多,而且也随着时间在不断增多,其中最著名的是四人组写的23种设计模式,并分为三大类:创建型模式,结构型模式,行为型模式。
    抽象工厂模式属于创建型模式里面的五种之一,其中的工厂模式由于违背开闭原则(也就是对扩展开发,对修改关闭),所以抽象工厂模式可以有效解决

    这里先给出java的抽象工厂模式的示例代码:

    //抽象的人类,为所有的人造人提供一个相同的人造人属性
    public abstract class Man {
    	public abstract void eat();
    }
    
    public class AsiaMan extends Man {	
    	@Override
    	public void eat() {
    	System.out.println("亚洲人用筷子吃");
    	}
    }
    
    public  class AmericanSuperMan extends Man  {
    	@Override
    	public void eat() {
    	System.out.println("美国人用刀叉吃");
    	}
    }
    //抽象工厂,为所有的不同的工厂提供一个制作人造人的相同方法
    public abstract class Factory {
    	public abstract Man	product();
    }
    
    public class AsiaManFactory extends Factory {
    	@Override
    	public Man product() {
    		Man anAisaMan = new AsiaMan();
    		return anAisaMan;
    	}
    }
    
    public class AmericanFactory extends Factory {
    	@Override
    	public Man product() {
    		AmericanSuperMan anAmericanSuperMan = new AmericanSuperMan();
    		return anAmericanSuperMan;
    	}
    }   
    public static void main(String[] args) {
    	
    	AsiaManFactory asiaManFactory = new AsiaManFactory();
    	AmericanFactory americanFactory = new AmericanFactory();
    	
    	Man anAmericanSuperMan = americanFactory.product();
    	Man anAsia = asiaManFactory.product();
    	
    	anAsia.eat();
    	anAmericanSuperMan.eat();	
    
    }
    

    运行结果:
    亚洲人用筷子吃
    美国人用刀叉吃

    假设2048年,人类科技创造了人造人,所有的人造人可以在工厂里面生产,
    一个人造人父类为所有不同的人造人提供一个相同的属性:吃,亚洲人造人用筷子吃,美洲人造人用刀叉吃。抽象工厂可以为不同的工厂提供一个统一的生成流程,亚洲人造人工厂生产亚洲人造人,美洲人造人工厂生产美洲人造人

    这里就有一个问题,为什么要用工厂模式,为什么不直接用 ClassA a = new ClassA();呢?看起来是等价的,但是如果生产的人造人不是在工厂里生产的,而是分布在世界各地的小作坊生产的,那么当所有亚洲人造人生产方式变了,那么就要更改世界各地的小作坊的生产方法,这样改下来就太麻烦了,用了工厂模式,只需要修改工厂里面的生产方法,那么得到的人造人就是统一的了。

    其实工厂模式就是对示例化过程的一个封装,为日后维护代码提供一个便捷的方法

  • 相关阅读:
    访问系统内容提供器,获取联系人列表
    ubuntu下查看IP Gateway DNS信息
    使用fragment,Pad手机共用一套代码
    动态注册广播接收器,监听网络变化
    启动Activity,传递参数最佳实践
    管理Activity,随时随地控制Activity的销毁工作
    unzip解压中文文件名乱码
    mysql null值转换
    (转)使用scp命令在linux操作系统之间传递文件
    比较两个日期的大小
  • 原文地址:https://www.cnblogs.com/panxiaochun/p/5613514.html
Copyright © 2020-2023  润新知