zoukankan      html  css  js  c++  java
  • java实现简单工厂模式

    昨天看了一下设计模式,复习了一下简单工厂模式,做个笔记,浅淡一下我对简单工厂模式的理解。书上使用的是C#,因为我所学的是Java,所以本人就用Java实现了一遍。如果有讲的不对的地方,希望能够指出来。简单工厂设计模式可以简单地理解为,你拿着一个空口袋去水果店买水果,你把空袋子给水果店老板,然后对老板讲我需要一袋子的柚子,十分钟以后。老板递给你一袋子柚子。你不需要知道他们是怎么区分柚子和橘子,又是怎么把柚子装进袋子的。你只需要知道你去了水果店,告诉他你需要一袋柚子。

      代码可以简单理解为,水果店,水果和柚子三部分。如果不谈用户交互界面的话,能和你直接接触的是水果店,下面这段代码可以理解为水果店,用来创造水果的。你可以告诉他你需要什么样的水果,他会返回你一袋水果。

    下面是水果的代码,定义了水果的共性和方法:

    package cn.cyy;
    
    public abstract class Fruit {
    	protected double weight;
    
    	public double getWeight() {
    		return weight;
    	}
    
    	public void setWeight(double weight) {
    		this.weight = weight;
    	}
    
    	public abstract void getResult();
    }
    

    下面是水果店的代码,水果店就可以看做是工厂,只要给工厂说明想要什么水果,就会返给你一袋水果:

    package cn.cyy;
    
    public class FruitsFactory {
    
        public static Fruit createFruit(String name){
            Fruit fruit = null;
            switch(name){
            case "柚子":
                fruit = new Grapefruit();
                break;
            case "橘子":
                fruit = new Tangerine();
                break;
            }
            return fruit;
        }
    }
    

    下面是具体的水果,是抽象类的实现类:

    package cn.cyy;
    
    public class Grapefruit extends Fruit {
    
    	private double price=5.5;
    
    	@Override
    	public void getResult() {
    		// TODO Auto-generated method stub
    
    		 System.out.println("一袋柚子的价钱是:"+(weight*price));
    	}
    
    }
    
    package cn.cyy;
    
    public  class Tangerine extends Fruit {
    
    	private double price=3.5;
    	@Override
    	public void getResult() {
    		// TODO Auto-generated method stub
    		System.out.println("一袋橘子的价钱是:"+(weight*price));
    
    	}
    
    }
    

    简单工厂模式可以分为这样几部分,他最大的好处可以理解为,如果水果店里新进柠檬,你只需要新建一个柠檬类,然后在水果店的switch里面增加分支就够了,不用去修改其他代码。是不是感觉代码之间的关联度少了很多?这样才能更利于代码的后期维护。

    下面是测试类:

    package cn.cyy;
    
    public class Main {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		
    		Fruit fruit=FruitsFactory.createFruit("橘子");
    		fruit.setWeight(3.0);
    		fruit.getResult();
    
    	}
    
    }
    

    运行结果:

      

      

    code everywhere everytime!
  • 相关阅读:
    DataBindings 与 INotifyPropertyChanged 实现自动刷新 WinForm 界面
    EasyInvoice 使用教程
    下载网页通用类
    c#操作excel的一些记录
    sql数据库基础知识整理,常用函数及常用语法
    动态行转列 pivot实现
    EFCodeFirst 数据迁移问题~
    asp.net 翻页时用ViewState保存上一页checkbox勾选的值
    参数化拼接in查询条件,个人备份
    retry
  • 原文地址:https://www.cnblogs.com/vcyy/p/8228940.html
Copyright © 2011-2022 走看看